套接字服务器和套接字客户端 java - 从位于不同计算机上的客户端检测服务器

Socket server and socket client java - detecting server from client located on different computers

所以目前我通过 IP 地址连接到服务器端,但我希望它不需要指定服务器计算机的 IP 地址。无论如何我只能检测到当前服务器套接字在网络上打开并从客户端连接到它?

这是我为服务器写的:

server = new ServerSocket(1234,100);

在客户端:

connection = new Socket(InetAddress.getByName("someIpAddress"),1234);

如果服务器始终在同一网络上,您始终可以使用 UDP 广播来检测服务。

服务器侦听广播,然后回复从而发送其 IP 地址。

如果服务器和客户端在不同的网络上,中间至少有一个路由器,那么就无法从客户端"detect"服务器。

i want it to not having the need to specify IP-address of the server computer. Anyhow i can just detect that a current serversocket is open on the network and connect to that from the clientside?

下面讨论两个方面:

  1. 如果您不知道给定网络中的服务器,那么在已知端口上检测服务器套接字 运行 是一项非常繁琐的任务。 Java SE 没有能力自动 确定哪个系统(在网络中)有服务器套接字侦听 X 端口。您需要 3rd 方工具来实现相同的目标。您可以采用基于命中和试验的方法来确定这一点。

  2. 还有一点,如果您知道服务器的主机名(如代码中的“someIpAddress.com”),那么在这种情况下,一切都归结为一个主机名解析器,它将从传递的主机名中获取 IP 地址。

    您可以在客户端的 /etc/hosts 文件中有一个关于服务器主机名和 IP 的映射。或者,您可以有一个 DNS 服务器,它将您的请求重定向到 IP,并让您连接到侦听 X 端口的服务器。