我正在使用 Java DatagramSocket 将数据流式传输到多个不同的客户端。当我自己处理当前注册的客户端列表时,我只将套接字绑定到服务器端口,而不连接到任何特定的客户端。
但是,由于不使用 connect(),我失去了 DatagramSocket 对不可达端口的 ICMP 通知做出反应的能力,如果其中一个客户端死亡并且没有机会正确地向服务器注销,则会发送这些通知。
有什么办法可以恢复这种行为?我曾想过每个客户端使用一个 DatagramSocket,但这似乎不可行,因为它们都必须绑定到服务器上的同一个端口(据我所知,在 UDP 中是不可能的)。
我知道不能保证我的服务器会看到 ICMP 消息,我将实施某种超时机制来处理它,但是对 ICMP 消息做出反应将允许我立即停止传输到任何没有的主机没有客户端正在运行,这对流媒体客户端用户来说似乎是一件好事。