yq_ryan 发表于 2015-2-11 15:20:50

用CSocket 重写OnReceive()函数时,出现收不到的情况

void CChatSocket::OnReceive( int nErrorCode)
{
m_pDoc->ProcessPendingRead();
CSocket::OnReceive(nErrorCode);
}

前几天用CSocket + CSocketFile写了一个聊天程序,经常发现 客户端明明发送了消息,但是服务器端OnReceive函数就是不响应,上网搜索找到了答案,在处理完以后加上AsyncSelect(FD_READ);即上面的程序变为
void CChatSocket::OnReceive( int nErrorCode)
{
m_pDoc->ProcessPendingRead();
AsyncSelect(FD_READ); //提请一个“读”的网络事件
CSocket::OnReceive(nErrorCode);
}
编程中遇到这个问题,发现很多人都遇到过这个问题。
症状如下:Socket连接后只能发送一次消息,发送第二次消息的时候,另一方就接收不到;
原因是:没有让Socket改变响应事件的发式
解决方法:在OnReceive()中,Receive()后调用AsyncSelect(FD_READ);
页: [1]
查看完整版本: 用CSocket 重写OnReceive()函数时,出现收不到的情况