Java 在特定IP地址上托管ServerSocket
我正在从事一个项目,该项目旨在跨随机系统进行移植,在一台计算机上使用Java 在特定IP地址上托管ServerSocket,java,sockets,ip,multicast,Java,Sockets,Ip,Multicast,我正在从事一个项目,该项目旨在跨随机系统进行移植,在一台计算机上使用ServerSocket托管一个“服务器”类型的程序,在另一台计算机上使用socket连接到同一网络上的“服务器”上的另一个“客户端”程序。我希望客户机始终能够找出服务器在网络上的位置,而不必在其他地方使用多播系统或托管系统,使其全部位于本地。我的印象是我能够在特定的IP地址上托管ServerSocket,我在这里尝试过: try { InetAddress addr = InetAddress.getByName("1
ServerSocket
托管一个“服务器”类型的程序,在另一台计算机上使用socket
连接到同一网络上的“服务器”上的另一个“客户端”程序。我希望客户机始终能够找出服务器在网络上的位置,而不必在其他地方使用多播系统或托管系统,使其全部位于本地。我的印象是我能够在特定的IP地址上托管ServerSocket
,我在这里尝试过:
try {
InetAddress addr = InetAddress.getByName("192.168.859.672");
serverSocket = new ServerSocket(Integer.parseInt("9532"), 50, addr);
} catch (Exception e) {
e.printStackTrace();
}
但这会返回错误
java.net.UnknownHostException: 192.168.859.672
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:901)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1293)
at java.net.InetAddress.getAllByName0(InetAddress.java:1246)
at java.net.InetAddress.getAllByName(InetAddress.java:1162)
at java.net.InetAddress.getAllByName(InetAddress.java:1098)
at java.net.InetAddress.getByName(InetAddress.java:1048)
at com.pulsepanda.dragon.core.Connection.startServer(Connection.java:30)
at com.pulsepanda.dragon.core.Connection.<init>(Connection.java:25)
at com.pulsepanda.dragon.core.Run.main(Run.java:5)
java.net.UnknownHostException:192.168.859.672
在java.net.Inet6AddressImpl.lookupAllHostAddr(本机方法)
位于java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:901)
位于java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1293)
位于java.net.InetAddress.getAllByName0(InetAddress.java:1246)
位于java.net.InetAddress.getAllByName(InetAddress.java:1162)
位于java.net.InetAddress.getAllByName(InetAddress.java:1098)
位于java.net.InetAddress.getByName(InetAddress.java:1048)
位于com.pulsepanda.dragon.core.Connection.startServer(Connection.java:30)
位于com.pulsepanda.dragon.core.Connection.(Connection.java:25)
位于com.pulsepanda.dragon.core.Run.main(Run.java:5)
如果这是一种让它工作的方法,将ServerSocket
托管在特定的IP地址上,那么我做错了什么?如果这不是一种有效的做事方式,我有两个问题:什么是我可以在没有多播系统的情况下完全在本地完成的方式,以及2)我所做的实际用途是什么
谢谢大家! 这样做的方法是使用DNS。服务器的每个实例都可以具有相同的非限定主机名。本地DNS服务器为您将其转换为该服务器的任何IP地址。如果是您要消除的未知后异常,则可以通过分配有效的IP地址来实现。 示例如下:
addr = InetAddress.getByName("192.168.85.67");
有关格式的详细信息,请参阅。
192.168.859.672
不是有效的IP地址。元素必须在0到255之间
IP地址必须是运行服务器的主机的本地地址
Integer.parseInt(“9532”)
只是一种毫无意义的迂回方式,用于编写9532
更改主机文件
/etc/主持人
添加以下行
127.0.1.1 192.168.859.672您只能将服务器套接字绑定到您正在运行的系统上配置的IP地址。所谓系统,您是指网络还是主机?系统=您的应用程序在其上执行的计算机。这可以与程序一起移植吗?例如,如果我在我的系统上设置它,完成项目,然后将它加载到另一个网络上,它会工作相同吗?或者DNS必须按网络设置吗?嗯,我这样做的原因是端口在其他地方发生了更改,但出于疑问,我将其设置为数字。您似乎在内部以字符串形式携带端口号。应该是一个整数。将字符串转换为整数的位置是首先提供字符串的位置,以便您立即验证它。