UDP 远程主机强迫关闭了一个现有的连接[转载]
原文链接:http://blog.sina.com.cn/s/blog_534c4b640100cf8a.html 著作权归原作者所有
在UDP通信过程中,如果客户端中途断开,服务器会收到一个SocketException,错误ID为10054,描述是“远程主机强迫关闭了一个现有的连接”,紧接着的事就可怕了,UDP服务终止监听,所有客户端都受到了影响。也就是说一个客户端引起的异常导致了整个系统的崩溃。
找了好几天了。终于找到了解决办法。
在初始化对象后设置属性如下:
Socket.IOControl 方法 (IOControlCode, Byte[], Byte[])
使用 IOControlCode 枚举指定控制代码,为 Socket 设置低级操作模式。
参数
- ioControlCode
-
一个 IOControlCode 值,它指定要执行的操作的控制代码。
- optionInValue
-
Byte 类型的数组,包含操作要求的输入数据。
- optionOutValue
-
Byte 类型的数组,包含由操作返回的输出数据。
返回值
optionOutValue 参数中的字节数。
![](http://i.msdn.microsoft.com/Global/Images/clear.gif)
异常类型 | 条件 |
---|---|
试图访问套接字时发生错误。有关更多信息,请参见备注部分。 | |
Socket 已关闭。 | |
试图不使用 Blocking 属性更改阻止模式。 |
![](http://i.msdn.microsoft.com/Global/Images/clear.gif)
此方法提供对 Socket 类的当前实例所基于的操作系统 Socket 的低级访问。有关更多信息,请参见 MSDN Library 中的 WSAIoctl 文档。
本人体会:
再做通信项目中无意中遇到了这个问题,记得上学的时候老师说过UDP是无连接的,但是在项目中遇到了这个远程主机强制关闭现有连接的错误,搞得一头雾水,什么也不用说,马上google一下,发现很多朋友都有遇到了这个问题,最后还是看到了原作者的这篇文章后解决了问题,呵呵,再次转载过来,希望帮助所有遇到这个问题的朋友快速的解决问题。
这里还有一篇是博客园的朋友写的解决方式是一样的。链接:
http://www.cnblogs.com/zhuangxuqiang/archive/2009/04/17/1437926.html