完成端口中如何判断客户端已经断开了连接? 同样,由于是异步操作,又如何来判断,WSAsend发送出去是否成功了?谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 客户端断开连接的时候,server的GetQueuedCompletionStatus会返回,并且NumberOfBytesTransferred等于零。WSASend你只能得到WOULDBLOCK状态。发送失败,等价于客户端已经断开了连接。 客户端断开连接的时候,server的GetQueuedCompletionStatus会返回,并且NumberOfBytesTransferred等于零。WSASend你只能得到WOULDBLOCK状态。发送失败,等价于客户端已经断开了连接。---------我试过了,这样不行 微软的iocp_standard例子就是这样做的。 GetQueuedCompletionStatus的返回值如果等于ERROR_NETNAME_DELETED,则关闭此路连接。 我做过实验,是这样的。 在完成端口服务器这边我使用AcceptEx接受连接请求,并且在连接时候读取数据。结果: 如果用户连接后,一直不发送数据,如果此时候用户断开,则会出现“客户端断开连接的时候,server的GetQueuedCompletionStatus会返回,并且NumberOfBytesTransferred等于零。” 如果用户连接后,与服务器进行过数据交互后,如果这时候用户断开,服务器这边没有什么反应,无法从GetQueuedCompletionStatus获取通知。所以CLIENT与SERVER间要有应用层的Keep_Alive机制,通过这种机制及时变更CLIENT连接状态 完成端口获取套接字消息(GetQueuedCompletionStatus)时,0 == dwIoSize(但你本来的发送和接收的长度不为0)WSARecv的时候返回值SOCKET_ERROR,但ERROR_IO_PENDING != WSAGetLastErrorWSASend的时候返回值SOCKET_ERROR,但ERROR_IO_PENDING != WSAGetLastError这几个地方判断客户端是否已断开。 flashboy(爱写程序的小绵羊),你说得不对。客户端连接断开,iocp服务器端是知道的。你可以去找微软的iocp_standard例子再看看。 江湖告急,唯有求助各位同道! 关于分离编译模式 WSAAsyncSelect模型连接成功,却不能发送消息(100分相送) ActiveX 中的ADO控件 非常棘手的问题,CSrollView滚动条设为大于32767后拖动滚动条位置到32767后又马上回到了1,但我确实要设滚动条的值大于32767. 关于多少分加星星??? 请问有没有免费的能很好的转换vcd->rm的工具? 求:Visual C++ MFC编程实例 的配书源码! 为什么我的程序总出错? hinstance 是不是就是地址? 有免费使用又好用的浏览器控件吗? 完成端口下的UDP的实现问题
---------
我试过了,这样不行
如果用户连接后,一直不发送数据,如果此时候用户断开,则会出现“客户端断开连接的时候,server的GetQueuedCompletionStatus会返回,并且NumberOfBytesTransferred等于零。”
如果用户连接后,与服务器进行过数据交互后,如果这时候用户断开,服务器这边没有什么反应,无法从GetQueuedCompletionStatus获取通知。所以CLIENT与SERVER间要有应用层的Keep_Alive机制,通过这种机制及时变更CLIENT连接状态
WSASend的时候返回值SOCKET_ERROR,但ERROR_IO_PENDING != WSAGetLastError
这几个地方判断客户端是否已断开。