WSAAnyncSelect模型客户端的问题
我用WSAAnyncSelect模型做了个客户端:
void CclientDlg::OnBnClickedBtnConnect()
{.....
connect(ConnectSocket, (SOCKADDR *) &ServerAddr, sizeof(ServerAddr));
WSAAsyncSelect(ConnectSocket,m_hWnd,WM_SOCKET,FD_READ|FD_WRITE|FD_CLOSE|FD_CONNECT);
}
LRESULT CclientDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{switch(message)
{
case WM_SOCKET:
if(WSAGETSELECTERROR(lParam))
{
closesocket((SOCKET)wParam);
}
switch(WSAGETSELECTEVENT(lParam))
{
case FD_READ:
....
break;
case FD_CONNECT:
....
break;
case FD_WRITE:
....
break;
case FD_CLOSE:
....
break;
}
}
return CDialog::WindowProc(message, wParam, lParam);
}
为什么我每次点击“连接”按钮后,窗口过程都会收到WM_SOCKET消息,并触发FD_WRITE,而不是FD_CONNECT?????
问题点数:20、回复次数:2Top
1 楼softrain(曾经的月光,现在的日光)回复于 2005-08-04 09:42:33 得分 10
当连接成功的时候是会先后收到FD_CONNECT和FD_WRITE,MSDN上说的很明白了。
对于TCP,我是不从来不管FD_WRITE消息的,只管FD_READ就够了,建议你不要管FD_WRITE消息。Top
2 楼softrain(曾经的月光,现在的日光)回复于 2005-08-04 09:46:55 得分 10
另外你的处理还是有点问题,如果出现网络错误关闭套接字就不应该再往下执行。
另外你创建套接字是否选择了FD_CONNECT事件?如果选择了而没有收到,应该是连接失败了。Top
相关问题
- 开发winsock客户端一般用什么socket模型
- select模型 服务器端如何检测客户端socket是否关闭?
- 哪位知道OICQ客户端、服务器端用的是哪种socket I/O模型?
- 【求助】在完成端口IOCP模型下如何知道客户端已关闭连接(掉线)?
- 关于完成端口模型怎样检测客户端意外断线的问题
- 谁有使用WSAAsyncSelect模型的客户端主机端例子程序啊?发给我一个吧
- iocp模型,客户端closesocket或者直接退出,服务器总是得到ERROR_NETNAME_DELETED 错误!!!
- 采用客户端主动关闭的client-server模型,如何防止恶意的client connect!
- 大家TCP服务器都用什么线程模型啊,能处理多少客户端啊?
- windows 2000 , winsock 重叠模型的 客户端 , 连接问题 , 如何控制 connect 超时




