Java - 通过DNS获取IP地址?

4
我的问题如下:
我有一个Java程序,即服务器,它正在等待来自客户端的TCP连接。问题是,服务器用于等待连接的IP地址可能会随时间变化而改变...因此,我希望客户端能以某种方式获取此地址。我认为我需要配置一些DNS服务器,但我不知道具体该怎么做。如果有免费的这样的服务等...
所以我想它应该像这样工作: 服务器启动时获取其IP。然后访问某个DNS(?)服务将此IP可用。 然后客户端执行类似getByName的操作,并查看服务器的IP以建立连接。
是这样吗?如果是这样, Java服务器代码应该如何编写,我可以使用哪个DNS服务(以及如何配置)?

这是家庭网络还是工作网络?如果是工作网络,那么这应该已经由您的网络团队管理了。在服务器端,没有太多变化(毕竟您只是在监听 - 唯一的复杂性在于是否有多个接口连接到不同的网络)。如果是家庭网络,请检查您的路由器设置,看看它是否支持DNS。 - Nim
2个回答

3

如果你的Java应用程序运行在连接到互联网的机器上,那么它已经有一个可用的DNS服务,并且至少有一个IP地址对其他机器在局域网中可见。使用类似我下面写的Java代码来获取IP地址。

import java.net.*;
import java.io.*;

public class Ip {
  public static void main ( String[] args ) throws IOException {
    String hostname = args[0];

    try {
      InetAddress ipaddress = InetAddress.getByName(hostname);
      System.out.println("IP address: " + ipaddress.getHostAddress());
    } catch ( UnknownHostException e ) {
      System.out.println("Could not find IP address for: " + hostname);
    }
  }
}

PS. 如果您运行Java服务器应用程序的机器的IP地址发生变化(它在家庭机器上运行且ISP分配动态IP),则使用免费服务,例如http://www.dyndns.com或类似服务。在这种情况下,会有一些复杂度,因为您必须通知您的动态DNS IP更改。一些路由器具有此功能内置,而另一些则没有。在这种情况下,您必须确保已通知动态DNS。互联网上有很多可用于此的脚本(通常是针对Linux / UNIX),以及一些适用于Windows的免费工具。我从未在Windows上完成此操作,但我在Linux上完成了它,并且它可以正常工作。


谢谢你的回答。我之前尝试使用的是DynDNS,现在正在尝试配置它。 - kri8or

-1
通常情况下,客户端应该通过DNS连接服务器,而不是IP。只需将您的客户端配置为连接到example.com,并将DNS名称example.com配置为指向您的IP地址即可。

客户端可以通过各种方式连接到服务器。有时甚至不需要使用任何IP地址!(例如:UNIX域套接字)这完全取决于设计。其次,如果IP地址发生变化(显然是这样的,根据OP),即使拥有DNS,也不能轻松配置DNS。此外,有时您事先知道服务器的IP地址将是静态的,但主机名可能尚未设置。 - DejanLekic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接