Java 如何在客户端检查端口是否打开';谁的电脑?

Java 如何在客户端检查端口是否打开';谁的电脑?,java,udp,Java,Udp,我有一个UDPserver,它接收来自客户端的消息并向客户端发送响应。但我需要检查UDPclients是否在线。 使用isReachable,我可以测试pc是否在线。但是,当不同的客户端使用相同的pc但端口不同时,如何检查端口是否打开(端口为5678的客户端1处于联机状态,但客户端2 6777处于关闭状态。在这种情况下,IP 192.168.1.7 IP是可访问的,但客户端2不是)?UDP是一种无连接、不可靠的面向数据包的协议。如果远程机器上没有绑定到特定端口的套接字,那么数据包将被丢弃 您必须

我有一个UDPserver,它接收来自客户端的消息并向客户端发送响应。但我需要检查UDPclients是否在线。
使用isReachable,我可以测试pc是否在线。但是,当不同的客户端使用相同的pc但端口不同时,如何检查端口是否打开(端口为5678的客户端1处于联机状态,但客户端2 6777处于关闭状态。在这种情况下,IP 192.168.1.7 IP是可访问的,但客户端2不是)?

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


您必须实现某种支持检测客户端是否在线的协议。可能定期发送保持活动类型的消息。

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


您必须实现某种支持检测客户端是否在线的协议。可能会定期发送“保持活动”类型的消息。

您在这里混淆了两个不同的概念。“isReachable”函数是一个IP层属性,它只是检查所涉及的IP地址是否响应IP协议数据包(事实上是这样的)


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

您在这里混淆了两个不同的概念。“isReachable”函数是一个IP层属性,它只是检查所涉及的IP地址是否响应IP协议数据包(事实上是这样的)


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

IsRechable将仅在给定主机上执行ICMP回显请求(ping),因此,如果客户端未运行,但只要主机响应ICM请求,它将显示为可访问


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

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


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

如果唯一的问题是要知道客户端是否处于活动状态,那么来自客户端的保持活动状态消息是最简单的。例如,您可以从包的内容(或发送方端口)中识别客户端

如果您希望向客户端发送消息,我认为您必须在两端都有一个UDP服务器,然后交换“客户端服务器”正在侦听的端口,并将其用于通信


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

如果唯一的问题是要知道客户机是否处于活动状态,那么来自客户机的保持活动状态消息最简单。例如,您可以从包的内容(或发送方端口)中识别客户端

如果您希望向客户端发送消息,我认为您必须在两端都有一个UDP服务器,然后交换“客户端服务器”正在侦听的端口,并将其用于通信


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

我认为这超出了UDP的范围。嗯……我可以用线程来做这件事吗?线程用于服务器的消息,线程用于用户的选择?我认为您需要用用户选择来实现什么来更新问题。或者选择这个问题的答案并创建一个后续问题。我相信这超出了UDP的范围。嗯…我可以用线程来做这样的事情吗?线程用于服务器的消息,线程用于用户的选择?我想你需要用你想用用户的选择来实现的内容来更新这个问题。或者选择此问题的答案并创建后续问题。但客户端可以向服务器发送消息。消息由用户选择。而且不可能等待用户的选择,同时等待服务器的消息。或者在UDP?上也可以,但客户端可以向服务器发送消息。消息由用户选择。而且不可能等待用户的选择,同时等待服务器的消息。或者在UDP上是可能的?