私は基本的な小さなゲームを作成しており、ソケットを使用して LAN 経由でスキャンできるようにしたいと考えています。現在のコードは機能しますが、粗くて遅いです。
私の現在のコードはそのように機能します。現在のコンピューターを最初の 2 オクターブ (たとえば 192.168) 取得し、次にデュアル for ループ (0-255) を実行して 192.168.0.0 から 192.168.255.255 までスキャンします。 LAN 内のすべての IP をスキャンする非効率的な方法です。
これはコードです:
new Thread(new Runnable() {
@Override
public void run() {
int next = 0;
try{
String ipAd = InetAddress.getLocalHost().getHostAddress();
String ipStart = ipAd.substring(0, NetHandler.nthOccurrence(ipAd, '.', 2)-1);
Socket s;
for(int i = 0 ; i < 255; i++){
for(int j = 0 ; j < 255; j++){
s = new Socket();
String ip = ipStart + (i + "." + j);
tests++;
server = ip;
try{
s.connect(new InetSocketAddress(ip, 26655), 10);
}catch(Exception e){
continue;
}
servers[next++] = ip;
componentList.add(new GuiButton(ids++, GuiMultiplayer.this, SpaceGame.WIDTH/2, SpaceGame.HEIGHT/4 - 60 + (50 * ids), ip));
}
}
}catch(Exception e){
}
}
}).start();
}
LAN ネットワーク上のすべてのデバイスを一覧表示する簡単な方法はありますか? それとも、私の大雑把で遅い解決策が唯一の方法ですか?
この怪物のプレビュー: