【发布时间】:2013-04-22 18:42:17
【问题描述】:
我正在使用套接字将应用程序中的 UDP 数据包发送到固定的 IP 地址和端口。套接字是用Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp) 实例化的,我在整个应用程序生命周期中都保留这个实例。每个 UDP 数据包都使用Socket.Send(byte[] buffer) 传输。
应用程序已经运行了数周,突然发送抛出SocketException 并显示提供了无效参数的消息。重新启动应用程序可以有效地解决问题,但我很想知道是否有人知道导致此问题的原因以及我是否可以遵循任何恢复策略。
【问题讨论】:
-
您必须更仔细地查看本机错误代码
SocketException耗材。在相应的 Windows SDK 头文件中查找它们。它们比消息更能提供信息。 -
好的,我复制了一个例外情况。如果我传输 UDP 数据包,并且我切断了计算机的网络连接,则会发生 SocketException (10055),之后每次发送都会发生 SocketException (10022)。
-
如果您断开连接,您可能应该重新创建套接字对象。
-
确实,这似乎可以解决网络中断问题。如果套接字未连接,我关闭它并重新创建它并执行新的连接。如果我插上网络,它会重新开始提交。
-
@PeterRitchie:在您的评论中发布答案,我会将其标记为最终答案