SocketException怎么处理.异常问题!

lin7788 2008-06-02 05:31:04
写一个socket,传输数据一切正常.但是当一个客户端关闭窗口时,服务器端就出现了一个如下异常:
//----------------------------------------------------------------------------
System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接。
在 System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
在 System.Net.Sockets.Socket.Receive(Byte[] buffer)
在 server1._.Form1.serviceClinet() 位置 E:\linfile\C#file\socket1.0\server\server1.0\server1.0\Form1.cs:行号 169
关闭socket0
在 System.Net.Sockets.SocketException 中第一次偶然出现的“System.dll”类型的异常
在 System.Threading.ThreadAbortException 中第一次偶然出现的“mscorlib.dll”类型的异常
//----------------------------------------------------------------------------------

需且其它用户和服务器再通信后也会引发这个异常.请问如何解决.源码较长不好贴上来.
...全文
1772 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jacky3555 2011-12-06
  • 打赏
  • 举报
回复
我在调试服务器端与客户端通信时也遇到过着这个问题,客户端断开有两种方式,一种是正常断开,通过poll函数可以判断,而你说的是异常断开,“远程主机强迫关闭了一个现有的连接。”这是由于TCP协议心跳包机制用来判断客户端是否异常断开,例如网线断了等情况导致,解决方法是关闭心跳包机制,或是采用try catch捕获异常,中断连接,重新侦听新的可用连接。
CNBT 2008-06-02
  • 打赏
  • 举报
回复
这个异常报的没错啊,你客户端关闭了,服务器端发现连接中断,而且中断的原因也告诉你了,这个都合符逻辑。

因此你的程序应该这样做:
1、服务端使用try...catch捕获这个异常后,把这个链接关闭;
2、客户端应该优化下代码,在正常退出的情况下,若碰到数据在发送中,应该正常的断开连接,释放端口再退出;

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧