C#UDP多播套接字-如何处理链路故障
我正在研究一个UDP多播库,遇到了一个关于如何正确处理链路故障、断开/重新连接的NIC电缆等的问题 在我的测试中,我有以下设置:C#UDP多播套接字-如何处理链路故障,c#,udp,multicast,C#,Udp,Multicast,我正在研究一个UDP多播库,遇到了一个关于如何正确处理链路故障、断开/重新连接的NIC电缆等的问题 在我的测试中,我有以下设置: 2台服务器sA和sB sA正在发送UDP多播数据,sB正在接收多播数据 服务器通过第2层Cisco千兆交换机连接 例如,当我加入sB上的多播组时,我开始从sA的多播数据包接收该套接字上的数据 现在,当我禁用/拔下多播接收器sB绑定到的NIC时,我不会 接收任何套接字级别的错误(例如socket.ReceiveAsync中的错误),我猜这是因为UDP是无连接的,但我
- 2台服务器sA和sB
- sA正在发送UDP多播数据,sB正在接收多播数据
- 服务器通过第2层Cisco千兆交换机连接
Tom我无法详细说明,因为我的公司协议是如何工作的,这是公司的秘密,但在服务器和客户机之间周期性地进行心跳编程。然后,您的软件可以计算最后一次心跳到达的时间,并推断您是否遇到了某种网络/硬件故障
您可以尝试使用许多选项来检测发生的故障,包括检查NetworkAddressChanged,但实施心跳会更安全,因为它是一个通用的解决方案,易于实施,应该涵盖几乎所有情况。我建议您订阅以下事件:System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged
要解决网络脱机时可用的问题,请设计事件处理程序以优雅地重置接收器。反之,当网络可用性处于联机状态时,请重新绑定接收器。好吧,我的应用程序级协议是发送/消耗心跳,但这在我的问题场景中并没有真正的帮助。当接收方应用程序未接收到任何心跳信号时,可能会出现多种情况:-发送方应用程序可能只是死机-多交换机网络中的中间交换机可能死机-交换机过载,etc.导致过度数据包丢失-etc.将在下一条评论中继续…在这些情况下,接收者都无法控制要采取的行动,因为重新加入多播套接字将导致异常,因为套接字仍然具有有效绑定,并且如果上述任何问题得到解决,接收器将再次接收数据,而无需采取任何行动。但是,当出现物理链路中断等情况时,纠正措施必须与我的测试不同,并且套接字不会自动重新加入多播组。所以,除非我遗漏了什么,否则心跳并不能真正解决这个问题。