【问题标题】:Detect server IP address检测服务器IP地址
【发布时间】:2014-11-20 22:26:21
【问题描述】:

我有一个 Java 客户端服务器架构,其中服务器使用固定端口进行侦听。客户端可以使用服务器 ip 地址进行连接,但我想使用端口扫描网络,这样用户就不必处理服务器的 ip 地址。目前,我通过查看客户端的 ip 并使用客户端的 ip 循环到每个可能的地址来实现这一点(192.168.1.0 - 我在最后一部分循环通过 1-255)。这种方法有效,但是在 java 中有没有更好的方法来做到这一点?

  for (int a = 0; a < 256; a++) {
       try {
          String ServerIp = clientIpLast3Parts + "." + a;
          InetAddress IPAddress = InetAddress.getByName(ServerIp);
          DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, PORT);
          clientSocket.send(sendPacket);
          DatagramPacket receivePacket = new DatagramPacket(
                                    receiveData, receiveData.length);
          clientSocket.receive(receivePacket);
          InetAddress ServerIp = receivePacket.getAddress();
          String modifiedSentence = new String(receivePacket.getData());
          ip = ServerIp.getHostAddress().toString();

          if (modifiedSentence != null) {
              //Got it
              break;
           }

        } catch (Exception e1) {
   }

【问题讨论】:

  • 局域网,“网络”是什么意思?如果服务器在 Internet 上怎么办?如果有多个服务器(例如用于测试目的)怎么办?我认为最好的解决方案是让用户指定服务器地址。空的 catch 块也是一个坏主意。
  • 服务器只在局域网中,不在网络中

标签: java networking ip


【解决方案1】:

如果您需要自动重新配置拓扑,我建议使用多播通知。服务器发送一个周期性的多播数据包,并指定其单播 IP 和端口。任何客户端在启动时都会监听该多播组,直到收到带有服务器 IP/端口的数据包。或者使用 DNS :)

【讨论】:

    猜你喜欢
    • 2010-11-25
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 2020-01-31
    • 1970-01-01
    相关资源
    最近更新 更多