我用CSocket做了一个客户端,连上HTTP服务器,然后发GET请求。在OnReceive中将所有收到的内容按字符显示出来。
但是每次都只能收到Body,收不到Header。也就是说能收到“<HTML>....”,收不到前面的“HTTP 1.1 200 OK ....”。如果返回的只有Header没有Body,连OnReceive都不会被调用!但我用Sniffer看收到的TCP包中是有这些内容的。怎么回事呢?难道CSocket自动把前面的过滤掉了?

解决方案 »

  1.   

    用socket编程,是可以收到“HTTP 1.1 200 OK ....”的。
    你的程序可能是向控制台输出的,这就可能是因为你的屏幕缓冲区太小的缘故,新的内容将旧的内容冲掉了。你可以设置端点,调试一下。
      

  2.   

    socket应该可以收到全部信息。
    除非你用浏览器控件将其过滤了。
      

  3.   

    Example
    void CMyAsyncSocket::OnReceive(int nErrorCode)   // CMyAsyncSocket is 
                                                    // derived from CAsyncSocket
    {
       static int i=0;   i++;   TCHAR buff[4096];
       int nRead;
       nRead = Receive(buff, 4096); 
       
       switch (nRead)
       {
       case 0:
          Close();
          break;
       case SOCKET_ERROR:
          if (GetLastError() != WSAEWOULDBLOCK) 
          {
             AfxMessageBox ("Error occurred");
             Close();
          }
          break;
       default:
          buff[nRead] = 0; //terminate the string
          CString szTemp(buff);
          m_strRecv += szTemp;   // m_strRecv is a CString declared 
                               // in CMyAsyncSocket
          if (szTemp.CompareNoCase("bye") == 0 )    ShutDown();
       }
       CAsyncSocket::OnReceive(nErrorCode);
    }
      

  4.   

    是我搞错了!
    程序没错,Apache确实没有发头过来,发Header来的时候我确实收到了!
    多谢各位!