我用socket实现http的GET命令,在发送Get命令后,接收服务器传回的信息
其中包含了协议头,和实体。但我发现我接收的实体的内容即请求的网页的源文件并不完整,缺少一部分。无论我把接收缓冲区社为多大,都解决不了问题,请问这是怎么回事啊
谢谢先

解决方案 »

  1.   

    你用我贴的这个类来接收或者直接用wininet方法
    http://community.csdn.net/Expert/topic/3532/3532744.xml?temp=.8361933
      

  2.   

    可以接收到
    但就是不完整! IN_ADDR iaHost;
    LPHOSTENT lpHostEntry;
    iaHost.s_addr = inet_addr(strServer);
    lpHostEntry = gethostbyname(strServer); char szBuffer[1024*20]={'\0'}; SOCKET Socket;

    Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (Socket == INVALID_SOCKET)
    {
    AfxMessageBox("socket error!"); 
    return -1;
    }
    char * SerIP;
    SerIP=inet_ntoa(*(struct in_addr *)*lpHostEntry->h_addr_list);   
    SOCKADDR_IN saServer;

    saServer.sin_port = htons(80);    
    saServer.sin_family = AF_INET;
    saServer.sin_addr.s_addr = inet_addr(SerIP);

    int nRet;
    nRet = connect(Socket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
    if (nRet == SOCKET_ERROR)
    {
    AfxMessageBox("connect error!") ;
    closesocket(Socket);
    return -1;
    }
            sprintf(szBuffer,"GET %s",strFile);
    strcat(szBuffer," HTTP/1.1 \r\n");
    strcat(szBuffer,"Accept: */* \r\n");
    strcat(szBuffer,"Accept-Language: zh-cn\r\n");
    strcat(szBuffer,"Accept-Encoding: gzip, deflater\r\n");
        strcat(szBuffer,"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; MyIE 2.4; Smart Explorer v4.9 ( 未注册 ))\r\n");
    char strTemp[25];
    sprintf(strTemp,"Host:%s:80\r\n",SerIP);
    strcat(szBuffer,strTemp);
    strcat(szBuffer,"Connection: Keep-Alive\r\n");
    strcat(szBuffer,"\r\n");

    nRet = send(Socket, szBuffer, strlen(szBuffer), 0);
    if (nRet == SOCKET_ERROR)
    {
    AfxMessageBox("send error!");
    closesocket(Socket);
    return -1;
    }

    nRet = recv(Socket, szBuffer, sizeof(szBuffer), 0);
    if (nRet == SOCKET_ERROR)
    {
    AfxMessageBox("recv error");
    return -1;
    } CFile cf; //写入文件
    cf.Open("E:\\test.txt",CFile::modeCreate|CFile::modeWrite);
    cf.Write(szBuffer,sizeof(szBuffer));

        AfxMessageBox("ok!");
        closesocket(Socket);
    这样写,怎么修改?
      

  3.   

    用wininet比较方便。帮你封装了http协议。而socket只能作封装了ip协议
      

  4.   

    我们的作业要求用socket实现,呵呵
    郁闷啊
      

  5.   

    http://community.csdn.net/Expert/topic/3532/3532744.xml?temp=.8361933
    我帖的这个类就是用socket实现的http GET方法