繁体   English   中英

如何查看客户端电脑的端口是否打开?

[英]how to check whether port is open at client's pc?

我有 UDP 服务器,它从客户端接收消息并向它们发送响应。 但我需要检查 UDPclients 是否在线。 使用 isReachable 我可以测试电脑是否在线。 但是,当不同的客户端使用同一台电脑但端口不同时,如何检查端口是否打开(端口 5678 的客户端 1 在线,但客户端 2 6777 关闭。IP 192.168.1.7 IP isReachable 在这种情况下,但客户端 2 不可用)?

UDP 是一种无连接、不可靠的面向数据包的协议。 如果没有套接字绑定到远程机器上的特定端口,则数据包将被简单地丢弃。

您将不得不实施某种支持检测客户端是否在线的协议。 也许定期发送一条保持活动类型的消息。

您在这里混淆了两个不同的概念。 'isReachable' function 是一个 IP 层属性,它只是检查是否有问题的 IP 地址正在响应 IP 协议数据包(它是)。

UDP 是一种广播数据报协议,专为 IP 上的未确认数据广播而设计,因此它没有内置的“可达性”概念。 您的 UDP 客户端必须以某种方式监视传入的检测消息,并相应地响应它们。

IsReachable 只会在给定主机上执行 ICMP 回显请求 (ping),因此如果您的客户端未运行,但只要您的主机响应 ICM 请求,它就会显示为可达。

如果您要检查您的远程客户端是否正在运行,您将需要实施一个简单的“ping”协议:即:您的服务器将向客户端发送一条特殊消息,客户端必须对其做出响应。

如果唯一的问题是知道客户端是否存活,那么来自客户端的 keep-alive 消息是最简单的。 例如,您可以从 package(或发件人端口)的内容中识别客户端。

如果你想向客户端发送消息,我认为你必须在两端都有一个 UDP 服务器,然后交换“客户端服务器”正在监听的端口并使用它进行通信。

当然,后者会导致防火墙出现问题,因为大多数防火墙会阻止所有传入流量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM