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

套接字服务器和套接字客户端java-从位于不同计算机上的客户端检测服务器,java,sockets,network-programming,detection,hostname,Java,Sockets,Network Programming,Detection,Hostname,因此,目前我通过IP地址连接到服务器端,但我希望它不需要指定服务器计算机的IP地址。总之,我可以检测到当前的serversocket在网络上打开,并从客户端连接到它 以下是我为服务器编写的内容: server = new ServerSocket(1234,100); 在客户端: connection = new Socket(InetAddress.getByName("someIpAddress"),1234); 如果服务器始终位于同一网络上,则始终可以使用UDP广播来检测服务 服务器侦

因此,目前我通过IP地址连接到服务器端,但我希望它不需要指定服务器计算机的IP地址。总之,我可以检测到当前的serversocket在网络上打开,并从客户端连接到它

以下是我为服务器编写的内容:

server = new ServerSocket(1234,100);
在客户端:

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

如果服务器始终位于同一网络上,则始终可以使用UDP广播来检测服务

服务器侦听广播,然后应答,从而发送其IP地址

如果服务器和客户机位于不同的网络上,并且中间至少有一个路由器,则无法从客户机“检测”服务器

我希望它不需要指定服务器的IP地址 电脑。无论如何,我只能检测到当前的serversocket是打开的 并从客户端连接到网络上

下面讨论两个方面:

  • 如果您不知道给定网络中的服务器,那么检测服务器套接字是否在已知端口上运行是一项非常麻烦的任务。JavaSE没有能力自动确定哪个系统(在网络中)有一个服务器套接字监听X端口。您需要第三方工具来实现同样的目标。您可以使用基于点击和试用的方法来确定这一点

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

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


  • OP特别关注java(请检查该标记)。我不认为这种方法会直接帮助他,因为他必须使用第三方工具来实现您添加的答案。@I_有帮助吗?我不太熟悉Java,但您是否告诉我没有办法在Java中创建UDP套接字?或者设置
    SO_BROADCAST
    socket标志?我更关心您答案的最后一段(原因是路由器和网关通常不转发广播消息)。我并不是说这是不可能的;但是,与C不同的是,可能需要使用外部库来完成最后一部分。@Am_I_________________________________。我同意,这就是为什么我在回答中暗示OP可能需要使用第三方库/工具来实现同样的目的。