问题描述:
MFC编程时,使用CAsyncSocket进行通信,当准备接收有用的数据时,发现有无关数据还在socket缓冲区。
解决办法:
1、使用循环调用Receive()直至返回SOCKET_ERROR(其值为-1),将socket缓冲区的无关数据读尽,然后调用自己function()去接受有用的数据,代码如下:
const int MAXRECEIVEBUF = 4096;
char szTemp[MAXRECEIVEBUF];
int bytes = 0;
while((bytes=m_ClientSocket.Receive(szTemp,MAXRECEIVEBUF/2)) != SOCKET_ERROR)
{
//接收数据之前,将socket的缓冲区数据清空,receive直到没数据时返回SOCKET_ERROR
szTemp[bytes]=0;
memset(szTemp,0,bytes);//
}
void function();
注意:不要使用shutdown,因为一旦使用shutdown,这个socket也就废弃了。也不要直接去动socket缓冲区,那样做很危险。