请教一下,
1.
怎样才能收到FD_CONNECT事件?
在WSAAsyncSelect 之后进行 connect,总是返回10035 的错误。
如果connect 之后再执行WSAAsyncSelect,则连上之后也没有FD_CONNECT事件?
2.
FD_WRITE是系统准备好了可以发送数据了而产生的事件
但是我不太明白 它的事件处理的函数中该怎么样跟send函数发生连理?谢谢指教。。
1.
怎样才能收到FD_CONNECT事件?
在WSAAsyncSelect 之后进行 connect,总是返回10035 的错误。
如果connect 之后再执行WSAAsyncSelect,则连上之后也没有FD_CONNECT事件?
2.
FD_WRITE是系统准备好了可以发送数据了而产生的事件
但是我不太明白 它的事件处理的函数中该怎么样跟send函数发生连理?谢谢指教。。
执行完在消息函数等消息就行了connect(m_sockConnect, ....);void CLientDlg::OnSocket(WPARAM wParam,LPARAM lParam)
{
int iEvent = WSAGETSELECTEVENT(lParam); //消息类别
int iErrorCode = WSAGETSELECTERROR(lParam); //错误代码
SOCKET CurSock = (SOCKET)wParam; //目标socket
switch(iEvent)
{
case FD_CONNECT: //客户端连接请求事件
{
if (iErrorCode == 0)
AfxMessageBox("连接成功");
else
AfxMessageBox("连接失败");
}
}
1.你没弄清楚什么是异步,除非马上连接上目标,否则就是返回某个错误,至于有没有连接上,要查看FD_CONNECT有没有被触发,如果被触发,还要查检查是连接上还是没连接上.
2.自己直接到msdn中认真看下FD_WRITE,FD_READ等的解释.
等连接结果出来,自然会有FD_CONNECT.你要做的就是弄好消息函数,添加自定义消息.
我之前就是忘记弄消息,搞的以为没有触发FD_CONNECT.
2.这个事件在异步应该不用关心吧,我是注释掉了.如果我错了请大家指正.
WSAAsyncSelect( SKTClient, hwnd, WM_SOCKET, FD_CONNECT | FD_READ | FD_WRITE ) ;
connect( SKTClient, (SOCKADDR*)&Addr, sizeof(Addr) ) ;当链接成功后,应用程序会收到WM_SOCKET消息。case WM_SOCKET: //WINSOCK消息
wEvent = WSAGETSELECTEVENT( lParam ) ;
wError = WSAGETSELECTERROR( lParam ) ;
if( wError ) return TRUE ;
switch( wEvent )
{
case FD_CONNECT:
//链接成功
}这样说的话您应该能明白了吧