我在编程时,使用CAsyncSocket;
客户端程序是这样的:CAsyncSocket m_socket;
.......
m_socket.Create();
...
err=m_socket.Connect("10.18.12.111", 9724);在这里err为0,使用
Error=GetLastError();
发现Error=WSAEWOULDBLOCK(10035) 难道是建立连接失败?于是我抓包,抓包的结果显示TCP三次握手成功了。
我想握手成功,那么就可以直接调用 OnSend( int nErrorCode )发送消息
这时候返回WSAENOTSOCK (10038)错误。 小弟我实在查找不到错误的原因了!只好求助各位大侠!指点一下迷津!
小弟在此先行谢过了!
客户端程序是这样的:CAsyncSocket m_socket;
.......
m_socket.Create();
...
err=m_socket.Connect("10.18.12.111", 9724);在这里err为0,使用
Error=GetLastError();
发现Error=WSAEWOULDBLOCK(10035) 难道是建立连接失败?于是我抓包,抓包的结果显示TCP三次握手成功了。
我想握手成功,那么就可以直接调用 OnSend( int nErrorCode )发送消息
这时候返回WSAENOTSOCK (10038)错误。 小弟我实在查找不到错误的原因了!只好求助各位大侠!指点一下迷津!
小弟在此先行谢过了!
解决方案 »
- error C2664: cannot convert parameter 3 from 'char [20]' to 'LP
- 请问一下 CImageList的问题?
- 有没有写过电力调度IEC101/104程序的,请教几个问题!
- InvalidateRect不理我怎么办
- DoModal()是什么意思?
- 急问:如何强制结束掉一个弹出内存错误对话框的进程
- 类似 windows 的 画图程序的橡皮筋技术,如何实现,(动态显示过程, 图像背景不变)
- vc打包时都需要哪些库文件啊?
- 各位VC大虾,请教一个Microsoft Chart Control的小问题
- 如何获得父窗口的句柄???
- Bluetooth问题
- 如何利用IHTMLDocument2获取网页里的插件信息
send返回WSAEWOULDBLOCK错误以后,要再用另一条FD_WRITE通知应用程序可以再次send数据就OK
加上OnConnect响应事件,因为你用的是CAsyncSocket(异步),所以m_socket.Connect("10.18.12.111", 9724); 并不是等连接成功才返回,而是马上返回了,这时,你加上OnConnect事件,当Connect真的成功以后,就会发消息给OnConnect,此时就说明连接成功了。然后才可以进行send操作。
所以一旦尝试了 连接,
它就直接返回了 WSAEWOULDBLOCK,
你应该是onconnect 中等待。
一旦有结果返回,系统会自动回调onconnect函数的。
这时候还没有连接成功,WSAEWOULDBLOCK就是在等待连接
可以用onconnect等待
不过我建议连接还是用阻塞的CSOCKET,然后你可以设个超时
int timeout;
///timeout赋值
setsockopt(bFlag, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout));