我这里有个程序,主要代码如下:
//把传递给它的字符串写到磁盘文件中
void LogFile(char *p)
{  
 FILE *fp=fopen(fname,"a+");
 fprintf(fp,"%s\n",p);
 fclose(fp);
}  //通过Winsock连接到HTTP服务器上
//当连接成功后,发送Get命令到HTTP服务器去下载指定路径上(/web/update/)的文件
bool HttpClient(void)  
{  
 WSADATA ws;
 SOCKET s;
 struct sockaddr_in addr;
 int iResult;
 long lResult;
 char strSubAddr[100], strBuffer[10000];
 lResult = WSAStartup(0x0101,&ws);
 s = socket(AF_INET,SOCK_STREAM,0);
 addr.sin_family = AF_INET;
 addr.sin_port = htons(8080);
 addr.sin_addr.s_addr = inet_addr("192.168.1.105");
 iResult = connect(s,(struct sockaddr *)&addr, sizeof(addr));
 if(SOCKET_ERROR == iResult)
 {
  // 连接失败
  WSACleanup();
  return false;
 }
 else
 {
  // 连接成功
  strcpy(strSubAddr, "GET /web/update/ServerVer.txt \r\n");
  strcpy(fname, "ServerVer.txt");
  iResult = send(s, strSubAddr,strlen(strSubAddr),0);
  printf("连接成功!");
  // 下载文件
  do
  {
   strset(strBuffer,' ');
   iResult = recv(s,strBuffer,sizeof(strBuffer),0);
   LogFile(strBuffer);
  } while(iResult != 0);
 }
 WSACleanup();
 return true;
}我现在已经搭建好了web服务器(tomcat搭建的),我现在想从我自己的这个web服务器上面http://localhost:8080/web/update/,这个路径下下载文件ServerVer.txt,但每次运行完程序后,在本地会有一个ServerVer.txt 的文件,里面却没有内容,请问哪位大神可以帮我解决一下这个问题,,感激不尽。。

解决方案 »

  1.   

    你只打开了文件没写入啊~
    void LogFile(char *p)
    {  
     FILE *fp=fopen(fname,"a+");fwrite(p,sizeof(p),1,fp);
     
     fclose(fp);
    }   
      

  2.   

    FILE *fp=fopen(fname,"a+");
    do
      {
      iResult = recv(s,strBuffer,sizeof(strBuffer),0);
      if( iResult == 0 )
        break;
      fwrite(strBuffer, 1, iResult,fp);
      } while(iResult != 0);
    fclose(fp);
      

  3.   

    fwrite(p,sizeof(p),1,fp);
    加这个也不行呢
      

  4.   

    为什么不用现成的API,自己用SOCKET做需要考虑太多细节.
      

  5.   

    我用的fprintf是一样的吧。
    问题应该是在
    do
      {
      strset(strBuffer,' ');
      iResult = recv(s,strBuffer,sizeof(strBuffer),0);
      LogFile(strBuffer);
      } while(iResult != 0);
    这里吧
    strBuffer里面读不到数据呢不知道咋回事啊
      

  6.   

    额,我目前不会用API呢,我是新手望指导一哈。
      

  7.   

    API函数用的很少,我还在学校,还没怎么用。大神有什么办法帮我解决下当下这个问题么?
      

  8.   

    谢谢,我还是没看出我这里是哪的问题呢
    strBuffer怎么没有内容呢
      

  9.   

    谢谢,我还是没看出我这里是哪错了呢。。
    为什么strBuffer没有数据呢
      

  10.   

    谢谢,不过我还是不知道我这里是哪的错误。。
    strBuffer为什么没有数据呢??
      

  11.   

    强烈建议贴代码贴的整齐点~
    大概扫视一番。
    iResult = send(s, strSubAddr,strlen(strSubAddr),0); 你这句想干什?是不是告知服务器我要下载了?
    接收的时候是没有错误的。当然要加上fwrite的。
    如果我上面说的都对。就是你服务器处理问题
      

  12.   

    strcpy(strSubAddr, "GET http://localhost:8080/web/update/ServerVer.txt HTTP/1.1\r\n");不知道我这个get命令写的对不对呢?
    iResult = send(s, strSubAddr,strlen(strSubAddr),0); 这句就是告诉服务器要下载了吧。
    然后iResult = recv(s,strBuffer,sizeof(strBuffer),0);就是收不到数据呢,执行此行代码后,iResult就变为0,socket就自动断开连接了,不知道这是为什么呢
      

  13.   

    你只打开了文件没写入啊~
    void LogFile(char *p)
    {   
     FILE *fp=fopen(fname,"a+");fwrite(p,sizeof(p),1,fp);
      
     fclose(fp);
      

  14.   

    你给出的这些代码,我找不出问题。建议你自己写个服务器,也挺简单的~道理和Web服务器一样,先在本地测测。