Java Lan Game список IP-адресов запущенного сервера - PullRequest
2 голосов
/ 08 октября 2011

В настоящее время мы работаем над клиент-серверной игрой в Java. Мы использовали DatagramSocket для связи между клиентом и сервером. Чтобы клиент мог связаться с сервером, он должен знать IP-адрес локальной сети компьютера, на котором работает сервер. Несколько клиентов могут подключаться к серверу, мы использовали поток для каждого клиента.

Наша проблема в том, что мы хотели показать клиентам список IP-адресов LAN запущенных серверов, чтобы им было проще находить такие серверы, как команда slist в Counter Strike. Наше решение заключается в том, что клиент отправляет сообщение всем компьютерам, подключенным к сети, и, если компьютер с работающим сервером получает его, он отвечает клиенту обратно, а затем мы печатаем его 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 Ответ

1 голос
/ 08 октября 2011

то, что вы ищете - это трансляция.

Я собрал для вас учебник: http://download.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html

...