异步套接字 connect返回-1
来源:互联网 发布:国家调查数据库 编辑:程序博客网 时间:2024/06/05 16:36
由于没有系统的学习网络编程,许多概念很模糊,之前也用socket编过小软件,不是mfc的那个类,是API,connect成功后返回0,失败返回-1,这几天又写关于网络通信的软件,是 客户端的,有收也有发,之前的解决方法是,阻塞套接字+多线程,但是我看到书上有种方法很好,用异步套接字,非阻塞的,于是就按照书上写的,用的是,WSAAsyncSelect(),试了下,发现,在connect时,连接上返回-1,很纳闷
就上网查资料,用GetLastError()得到10035,10035的意思是:无法立即完成一个非阻挡性套接字操作。网上有很多大大,我就按照他们的方法试了试,在WSAAsyncSelect( SKTClient, hwnd, WM_SOCKET, FD_CONNECT | FD_READ )中加入FD_CONNECT,在消息响应函数中用switch,FD_CONNECT和FD_READ,结果成功了。
原来调用 WSAAsyncSelect 函数之后,就会将SOCKET设置成“异步选择”的I/O模型,这个时候,对于SOCKET的操作就是异步的了,而且是和Windows的消息机制紧密结合了。在这个之后,connect等函数的操作结果(成功或不成功)都不是通过函数的返回值提现的。而是在链接成功后,通过消息机制通知应用程序。
以下是部分代码:
WSAAsyncSelect(s,this->m_hWnd,WM_SOCKET,FD_CONNECT|FD_READ);
void CPcTCPDlg::OnSocket(WPARAM wParam,LPARAM lParam){char buf[100]={0};CString str="";int iEvent = WSAGETSELECTEVENT(lParam); //消息类别 int iErrorCode = WSAGETSELECTERROR(lParam); //错误代码switch(lParam) { case FD_CONNECT: //客户端连接请求事件 { if (iErrorCode == 0) {GetDlgItem(IDC_TEXT)->GetWindowText(str);str+="connected! \r\n";GetDlgItem(IDC_TEXT)->SetWindowText(str);GetDlgItem(IDC_SENDTEXT)->EnableWindow(true);GetDlgItem(IDC_SEND)->EnableWindow(true);GetDlgItem(IDC_ADDR)->EnableWindow(false);GetDlgItem(IDC_PORT)->EnableWindow(false);//AfxMessageBox("连接成功");}else {GetDlgItem(IDC_TEXT)->GetWindowText(str);str+="connect faliure,please try again! \r\n";GetDlgItem(IDC_TEXT)->SetWindowText(str);}//AfxMessageBox("连接失败"); } break;case FD_READ:{
- 异步套接字 connect返回-1
- 异步套接字编程
- VC 异步套接字
- 异步套接字示例
- 异步套接字编程
- 异步套接字
- 异步套接字
- 异步套接字
- 套接字 同步 异步
- 异步套接字
- 异步套接字编程:
- vc异步套接字
- 异步套接字
- 异步套接字实现
- 设置异步套接字
- connect的UDB套接字
- 非阻塞 connect套接字
- 深入了解异步套接字
- C++Builder的一些小技巧
- Linux VPN服务器之OpenVPN
- 江苏一法院炮轰影视剧:渲染性解放、包二奶诱发离婚
- xpath
- Putty初级使用及配置
- 异步套接字 connect返回-1
- IBM导航
- 如何在C语言中实现简单的泛型编程
- Linux的五个查找命令:find,locate,whereis,which,type/区别
- c语言实现泛型函数
- 2012年3月10日C++学习笔记
- 回调函数与泛型函数
- 修复DISCUZ!的pre_connect_feedlog等表不存在错误
- Photoshop照片模糊变清晰大全