簡體   English   中英

掃描局域網中的套接字?

[英]Scanning a LAN for a Socket?

我正在創建一個基本的小游戲,但我希望它能夠使用套接字在LAN上進行掃描。我當前的代碼有效,但是它粗糙而緩慢。

我當前的代碼是這樣工作的,它獲取當前計算機的前2個八度音階(例如192.168),然后執行對偶循環(0-255)從192.168.0.0掃描到192.168.255.255,在我看來這是一個非常掃描局域網中所有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網絡上的所有設備? 還是我的粗慢解決方案是唯一的方法?

此怪獸的預覽:

在此處輸入圖片說明

通常,使用UDP廣播發現局域網上應用程序的運行實例。 讓發出請求的應用程序在預定端口上向LAN的子網廣播IP發送一條請求消息,該消息會將消息復制到連接到該子網的每台PC上的該端口。 您的其他應用程序可以在該端口上打開UDP偵聽套接字以接收請求。 每個應用程序收到請求后,將獲得請求者的IP,並可以直接向其發送回復,從而使請求者可以發現復制者。 發送初始請求后,請求者可以等待一段時間,以收集收到的所有答復,然后根據需要使用該信息。

我的建議是對應用程序進行多線程處理,以便您一次啟動多個連接。 如果您以前沒有做過多線程Java應用程序,請查看Java Concurrency教程 ,了解如何執行此操作。

編輯:您當然也可以在評論中將此與其他人的建議結合起來。 實際上,在處理並發之前,我可能會使用他們的建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM