Java - 通过名称 DNS (?) 获取 IP 地址

标签 java sockets tcp dns

我的问题如下:

我有一个 java 程序,一个服务器,正在等待来自客户端的 TCP 连接。 问题是,服务器用于等待连接的 IP 地址会随时间变化...... 所以我希望客户能够以某种方式获得这个地址。 我想我需要配置一些 DNS 服务器,但我不知 Prop 体怎么做。如果有这样的服务是免费的等等……

所以我认为它会像这样工作: 服务器在启动时获取其IP。然后访问一些 DNS (?) 服务以使该 IP 可用。 然后客户端做getByName之类的东西,看看服务器的IP是多少来建立连接。
会是这样吗?如果是这样, 这在 java 服务器代码上如何,我可以使用什么 DNS 服务(以及如何配置它?)

最佳答案

如果您的 Java 应用程序在 Internet 上的计算机上运行,​​则它已经具有可用的 DNS 服务,并且它已经具有至少一个可供 LAN 中的其他计算机可见的 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);
    }
  }
}

附言。如果运行 Java 服务器应用程序的机器的 IP 正在改变(它在家用机器上运行并且 ISP 分配动态 IP),那么使用像 http://www.dyndns.com 这样的免费服务或类似的。在这种情况下,它会变得有点复杂,因为您必须将 IP 更改通知您的动态 DNS。有些路由器内置此功能,有些则没有。在这种情况下,您必须确保通知动态 DNS。 Internet 上有大量脚本可以为您执行此操作(通常用于 Linux/UNIX),并且有一些用于 Windows 的免费软件工具。我从来没有在 Windows 上这样做过,但我在 Linux 上做过,而且效果很好。

关于Java - 通过名称 DNS (?) 获取 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8519220/

相关文章:

javascript - 与Node.js的长连接,如何减少内存使用,防止内存泄漏?还与 V8 和 webkit-devtools 相关

java.net.SocketException : socket failed: EACCES (Permission denied) MongoDB connection 异常

java - 如何使用java反转句子中的单词

java - 带反斜杠的输入与正则表达式不匹配

performance - 本地 IPC 的平均性能测量

sockets - 将输入的 unix 流复制到多个 TCP 客户端(使用 socat)

c - 如何使用c获取站点ip地址

java - 2009 年 Ruby on Rails 与 Java 的开发生产力

c# - 如何连接用不同语言编写的客户端服务器

java - 在 Java 中使用 TCP 聊天