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