我用CSocket做了一个客户端,连上HTTP服务器,然后发GET请求。在OnReceive中将所有收到的内容按字符显示出来。
但是每次都只能收到Body,收不到Header。也就是说能收到“<HTML>....”,收不到前面的“HTTP 1.1 200 OK ....”。如果返回的只有Header没有Body,连OnReceive都不会被调用!但我用Sniffer看收到的TCP包中是有这些内容的。怎么回事呢?难道CSocket自动把前面的过滤掉了?
但是每次都只能收到Body,收不到Header。也就是说能收到“<HTML>....”,收不到前面的“HTTP 1.1 200 OK ....”。如果返回的只有Header没有Body,连OnReceive都不会被调用!但我用Sniffer看收到的TCP包中是有这些内容的。怎么回事呢?难道CSocket自动把前面的过滤掉了?
你的程序可能是向控制台输出的,这就可能是因为你的屏幕缓冲区太小的缘故,新的内容将旧的内容冲掉了。你可以设置端点,调试一下。
除非你用浏览器控件将其过滤了。
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);
}
程序没错,Apache确实没有发头过来,发Header来的时候我确实收到了!
多谢各位!