Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在特定IP地址上托管ServerSocket_Java_Sockets_Ip_Multicast - Fatal编程技术网

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必须按网络设置吗?嗯,我这样做的原因是端口在其他地方发生了更改,但出于疑问,我将其设置为数字。您似乎在内部以字符串形式携带端口号。应该是一个整数。将字符串转换为整数的位置是首先提供字符串的位置,以便您立即验证它。