首页 新闻 会员 周边

请教Socket错误; 无法从传输连接中读取数据: 由于连接方在一段时间后没有正确答复或连接的主机没

0
[已关闭问题]

错误代码是:int j = clientinfo.ns.EndRead(iar);
这句代码我是用来判断客户端是不是关闭了socket,如果j=0就是
客户端闭了socket
错误信息如下:
System.IO.IOException: 无法从传输连接中读取数据: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。。 ---> System.Net.Sockets.SocketException: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
   在 System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
   在 System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)
   --- 内部异常堆栈跟踪的结尾 ---
   在 System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)

拖鞋王子的主页 拖鞋王子 | 初学一级 | 园豆:37
提问于:2010-06-10 10:22
< >
分享
其他回答(1)
0

建议用 EndReceive(IAsyncResult asyncResult, out SocketError errorCode) 重载函数。在完成回调后不会抛出异常。 你可以通过 errorCode 看是什么原因导致的。

正常情况下返回 0 长度字节。

如果客户端主动断开, 通常是 SocketError.ConnectionReset;

如果是服务端主动断开通常是 SocketError.ConnectionAborted;

(这两种情况发生后,通常当前套接字不可用了。 不过可以为以后重用)

最后一种比较常见的是 SocketError.IOPending;

(这种情况发生后,通常是重新投递读取请求)

还有其它可能的情况...

paulblog | 园豆:210 (菜鸟二级) | 2010-06-10 13:11
0

请问如何解决的?

极乐 | 园豆:202 (菜鸟二级) | 2013-11-08 10:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册