最近重新翻开原来的程序时发现,原来使用MFC的CSocket类进行的TCP通讯,然后调试的时候发现OnReceive居然只进了一次。
后面查看了源码后,发现需要OnReceive后调用Receive函数才可以继续下次的响应。
废话不多说,直接上源码
void CGCSocket::OnReceive(int nErrorCode)
{
if(nErrorCode == 0)
{
}
CSocket::OnReceive(nErrorCode);
CSocket::Receive(NULL, 0, 0);//如果前面没有调用Receive函数,则这个是必须要的。如果数据没有被取走,会一直进OnReceive函数。当然这里调用AsyncSelect(FD_READ)也是可以的。
}