Java Lan游戏列表运行服务器的IP地址

时间:2011-10-07 23:44:14

标签: java network-programming client-server lan

我们目前正在研究java中的客户端 - 服务器游戏。我们使用DatagramSocket来执行客户端和服务器之间的通信。为了使客户端与服务器通信,他必须知道运行服务器的机器的LAN IP地址。多个客户端可以连接到服务器,我们为每个客户端使用了一个线程。

我们的问题是我们想要向客户端显示运行服务器的LAN IP地址列表,以便他们更容易在Counter Strike中找到像slist命令这样的服务器。我们的解决方案是客户端向连接到网络的所有计算机发送消息,如果有正在运行的服务器的计算机收到消息,它会将消息回复给客户端,然后我们在客户端打印它的IP地址。

InetAddress localHost = Inet4Address.getLocalHost();
String myIP=localHost.toString().substring(localHost.toString().lastIndexOf("/")+1);

//split myIP into 4 parts (part1.part2.part3.part4)
//use the first part to check the class of the network (A, B, or C)

//I'll skip to C
if(part1>=1 && part1<=126) //A
else if(part1>=128 && part1<=191) //B
else if(part1>=192 && part1<=223){
    String network= part1 + "." + part2 + "." part3;
    String guess;
    for(i=0;i<255;i++){
         guess = network+"."+i;
         serverSend(guess); //send the message to an ip address in the network
    }
}

它适用于C类网络,但对于B和A,它太慢了。我们假设B和A的最坏情况子网掩码是255.255.0.0(65,025次迭代)和255.0.0.0(16,581,375)。

有没有人有更好的解决方案呢?提前谢谢你。

1 个答案:

答案 0 :(得分:1)

您正在寻找的是广播。

我为你收集了一个教程: http://download.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html