winsock实验,多人聊天室,遇到消息收不到的情况
原先代码:
void CCSocket::OnReceive(int nErrorCode)
{
// TODO: 在此添加专用代码和/或调用基类
CSocket::OnReceive(nErrorCode);
//调用CTCDlg类的相应函数处理
if (nErrorCode == 0) m_pDlg->OnReceive();
}
原因是:没有让Socket改变响应事件的方式
解决方法:在OnReceive()中,Receive()后调用AsyncSelect(FD_READ);
改后代码:
void CCSocket::OnReceive(int nErrorCode)
{
// TODO: 在此添加专用代码和/或调用基类
//调用CTCDlg类的相应函数处理
if (nErrorCode == 0) m_pDlg->OnReceive();
AsyncSelect(FD_READ);
CSocket::OnReceive(nErrorCode);
}
CSocket: 是同步操作,堵塞模式。
AsyncSelect(): 非阻断式的选择对象.可以理解成异步的执行select操作.