在特定IP地址上托管ServerSocket

时间:2014-11-07 16:58:53

标签: java sockets ip multicast

我正在开发一个旨在跨越随机系统移植的项目,并拥有一台服务器"使用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)

如果这是一种让它工作的方法,让ServerSocket托管在特定的IP地址上,我做错了什么?如果这不是一种有效的做事方式,我有两个问题:我可以在没有多播系统的情况下在本地做什么,2)我实际使用的是什么?

谢谢!

4 个答案:

答案 0 :(得分:0)

执行此操作的方法是使用DNS。服务器的每个实例都可以具有相同的非限定主机名。本地DNS服务器会将您转换为该服务器的IP地址。

答案 1 :(得分:0)

如果是想要摆脱的UnknownHostException,那将是通过分配有效的IP地址。 示例如下:

addr = InetAddress.getByName("192.168.85.67");

有关格式的详细信息,请参阅Javadocs

答案 2 :(得分:0)

192.168.859.672不是有效的IP地址。元素必须在0..255范围内。

IP地址必须是运行服务器的主机的本地IP地址。

Integer.parseInt("9532")只是一种无意义的迂回写作方式9532

答案 3 :(得分:0)

更改您的主机文件 的/ etc /主机

添加以下行

127.0.1.1 192.168.859.672

相关问题