我的问题如下:
我有一个java程序,一个服务器,正在等待来自客户端的TCP连接。问题是,服务器用于等待连接的IP地址可能随时间而变化......所以我希望客户能够以某种方式获得此地址。我想我需要配置一些DNS服务器,但我不确切知道如何。如果免费提供此类服务等...
所以我认为它会像这样工作:服务器启动时获取其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);
}
}
}
PS。如果您运行Java服务器应用程序的计算机的IP正在更改(它在家庭计算机上运行并且ISP分配动态IP),则使用http://www.dyndns.com或类似的免费服务。在这种情况下,它会变得有点复杂,因为您必须通知动态DNS IP更改。有些路由器内置了此功能,有些则没有。在这种情况下,您必须确保通知dynamicDNS。 Internet上有许多脚本可以为您执行此操作(通常用于Linux / UNIX),并且有一些适用于Windows的免费工具。我从来没有在Windows上这样做过,但是我用Linux做过它并且效果很好。
通常,客户端应通过DNS而不是IP连接到服务器。只需将客户端配置为连接到example.com并配置DNS名称example.com以指向您的IP地址。