我們目前正在使用java開發客戶端服務器遊戲。我們使用DatagramSocket
來執行客戶端和服務器之間的通信。爲了客戶端與服務器通信,他必須知道服務器正在運行的機器的LAN IP地址。多個客戶端可以連接到服務器,我們爲每個客戶端使用一個線程。Java Lan遊戲列表Running Server的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)。
有沒有人有更好的解決方案呢?先謝謝你。