我有UDP服务器接收来自客户端的消息并向它们发送响应。但我需要检查UDP客户端是否在线。 使用isReachable我可以测试pc是否在线。但是当不同的客户端使用相同的pc但是使用不同的端口时如何检查端口是否打开(Client1端口5678是在线的但是client2 6777是关闭的.IP 192.168.1.7 IP isReachable在这种情况下但是client2不是)?/ p>
答案 0 :(得分:1)
UDP是一种无连接,不可靠的面向数据包的协议。如果没有绑定到远程计算机上特定端口的套接字,则只会删除该数据包。
您必须实施某种协议,以支持检测客户端是否在线。也许定期发送保持活动类型的消息。
答案 1 :(得分:1)
你在这里混淆了两个不同的概念。 'isReachable'功能是一个IP层属性,它只是检查有问题的IP地址是否响应IP协议数据包(它是)。
UDP是一种广播数据报协议,专为通过IP进行未确认的数据广播而设计,因此它没有内置的“可达性”概念。您的UDP客户端必须以某种方式监视传入的检测消息,并相应地响应它们。
答案 2 :(得分:1)
IsReachable只会在给定主机上执行ICMP回应请求(ping),因此如果您的客户端未运行,则只要主机响应ICM请求,它就会显示为可达。
如果你要检查你的远程客户端是否正在运行,你将需要实现一个简单的" ping" protocol:即:您的服务器将向客户端发送特殊消息,客户端必须对其进行响应。
答案 3 :(得分:1)
如果唯一的问题是要知道客户端是否还活着,那么来自客户端的keep-alive消息是最简单的。例如,您可以从包的内容(或发件人端口)中识别客户端。
如果您希望向客户端发送消息,我认为您必须在两端都有UDP服务器,然后交换'客户端服务器'正在侦听的端口并将其用于通信。
当然,后者会导致防火墙出现问题,因为大多数会阻止所有传入流量。