在Java中创建客户端服务器应用程序,这两台机器都可以拥有动态的IP地址

StackOverflow https://stackoverflow.com/questions/3697878

  •  02-10-2019
  •  | 
  •  

这就是我打算做的。假设有2个机器A和B。我需要创建一个应用程序A可以使用Java SE将数据发送到机器B。

我知道要建立一个连接,您需要创建一个serversocket类的对象,然后将Accept()方法用作

在机器B中:serversocket ss = new serversocket(12000);

而(true)

{

插座s = ss.accept();

      .
      .
      .
      .

}

在机器A中:

插座s =新套接字(“机器B的IP地址>",12000);

                .
                .
                .
                .

这是问题。

假设如果 机器B的IP地址通过DHCP动态分配, ,即每次机器重新启动时都可以更改。

有什么方法可以使机器中的Java PGM可以识别B的IP地址,而无需手动键入它???

希望您的问题很清楚。等待答复!

有帮助吗?

解决方案

大多数DNS服务器都有一种机制,允许DHCP服务器对本地(内部)区域进行动态更新。如果您可以使用此功能,则可以使用DNS名称,并让系统人员确保DNS记录与DHCP租赁最新。

可以在更广泛的互联网上使用DDNS服务来实现类似的基于DNS的方法 dyndns.

如果您不能使用DNS,那么您会使用基于UDP广播的方法。这是与DHCP,Bonjour和SMB这样的协议在本地网络上找到其他计算机的协议的机制相同的机制,而无需知道其地址。而且,这种方法只能在这些技术工作的相同情况下(通常仅在本地网络中,绝对不是在更大的互联网上)起作用。

在Java,您将通过 Datagramsocket 班级。

引用API文档:

UDP广播发送始终在DataGramSocket上启用。为了接收广播数据包,DataGramSocket应绑定到通配符地址。在某些实现中,当DataGramSocket绑定到更具体的地址时,也可以收到广播数据包。

例子:

DatagramSocket s = new DatagramSocket(null); 
s.bind(new InetSocketAddress(8888)); 

等同于:

DatagramSocket s = new DatagramSocket(8888); 

两种情况都将创建一个DataGramSocket,能够在UDP端口8888上接收广播。

如果您的两台机器位于Internet上的不同位置,并且您无法使用DDNS服务(如上所述,如上所述),那么最好的选择就是构建中央注册服务器。这将是一台简单的服务器(甚至可能是Web服务),该服务器在Internet上的已知地址运行。您的每台客户端机器将向中央注册服务器注册,因此中央注册服务器将知道这两台机器的IP地址。然后,每台机器可以通过中央注册服务器请求对方的地址。您必须对安全性进行一些思考,以防止您的注册表的恶意“中毒”,但是否则,这是相当直接的。


编辑:

我刚发现 jxta. 。这是一套用于构建具有点对点网络功能的Java应用程序的工具。我没有任何直接的经验,但是看起来它可以完成您想要的东西(并且可能为您提供了很多工作,从而为您提供了很多工作。

实际上,它看起来像 p2psockets 确实做你想要的。

其他提示

在Java中,您可以按主机名计算机器的IP地址,这是代码

 java.net.InetAddress inetAdd = java.net.InetAddress.getByName("www.ibm.com");
 System.out.println("IP Address is : " + inetAdd.getHostAddress());

每当机器重新启动时,使用此代码来获取更改的IP地址

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top