2013-08-16 70 views
-1

我正在創建對等網絡上的聊天應用程序。LAN上的多播IP地址

我想寫代碼,將允許我檢測哪些計算機已安裝應用程序,如果它正在運行(以便我可以顯示誰在線)。

我認爲,計劃將在多播該節目運行和其他人將檢測到IP組播,並將它們添加到列表中顯示在線用戶的IP地址..

請告訴我如何寫程序爲了這。

或告訴我任何其他邏輯這個應用程序顯示在其PC我的應用程序運行

+0

請告訴我如何爲此編寫程序 – Kundan

+0

請告訴我您到目前爲止如何嘗試編寫程序,您遇到了哪些問題,相關代碼以及您試圖執行的操作解決你的問題。 –

回答

0

如果要檢測已安裝的應用程序客戶端,您將需要設置一個服務或程序始終執行在背景中。爲什麼你需要檢查誰安裝了它?

爲了檢測它是否正在運行,您可以簡單地執行代碼,就像我在下面的程序中概述的一樣。

對於你的服務器,你需要運行一個這樣的線程;

class MultiCastServerThread extends Thread { 
    protected DatagramSocket socket = new DatagramSocket(); 
    protected String multicastGroupId = "224.0.0.224"; 
    protected long delay = 1000l; 
    protected int port = 2244; 

    public MultiCastServerThread() throws IOException { 
     super("SpeakServerThread"); 
    } 

    public void run() { 
     InetAddress group = InetAddress.getByName(multicastGroupId); 
     while (true) { 
      try { 
       byte[] buf = new byte[256]; 
       buf = "Message".getBytes(); 
       DatagramPacket packet = new DatagramPacket(buf, buf.length, group, port); 
       socket.send(packet); 
       sleep(delay); 
      }catch (InterruptedException e){ 
      }catch (IOException e) { 
       e.printStackTrace(); 
       socket.close(); 
       break; 
      } 
     } 
    } 
} 

它每秒向多播組224.0.0.224多播消息「消息」。

對於你的客戶,你會想調用一個方法,如;

final String MULTICAST_GROUP = "224.0.0.224"; 
final int PORT = 2244; 
public String getMultiCast() { 
    MulticastSocket socket = new MulticastSocket(PORT); 
    InetAddress address = InetAddress.getByName(MULTICAST_GROUP); 
    socket.joinGroup(address); 
    DatagramPacket packet; 
    byte[] buf = new byte[256]; 
    packet = new DatagramPacket(buf, buf.length); 
    socket.receive(packet); 
    String rtn = new String(packet.getData()); 
    socket.leaveGroup(address); 
    socket.close(); 
    return rtn; 
} 

它偵聽多播組224.0.0.224並且一旦它接收到一個包時,它關閉套接字並返回從數據包字節數組的字符串。

但是由於socket.recieve()是一個阻塞調用,根據您的要求,您應該從一個單獨的線程或任務調用客戶端方法,並且有一些超時機制。沒有你的系統的進一步細節,很難說什麼是最好的。

+0

嘿謝謝.. 它的工作... – Kundan

+1

在close()之前調用leaveGroup()是多餘的。 – EJP