MFC中清除CAsyncSocket緩衝區

問題描述:

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緩衝區,那樣做很危險。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章