我正在創建對等網絡上的聊天應用程序。LAN上的多播IP地址
我想寫代碼,將允許我檢測哪些計算機已安裝應用程序,如果它正在運行(以便我可以顯示誰在線)。
我認爲,計劃將在多播該節目運行和其他人將檢測到IP組播,並將它們添加到列表中顯示在線用戶的IP地址..
請告訴我如何寫程序爲了這。
或告訴我任何其他邏輯這個應用程序顯示在其PC我的應用程序運行
我正在創建對等網絡上的聊天應用程序。LAN上的多播IP地址
我想寫代碼,將允許我檢測哪些計算機已安裝應用程序,如果它正在運行(以便我可以顯示誰在線)。
我認爲,計劃將在多播該節目運行和其他人將檢測到IP組播,並將它們添加到列表中顯示在線用戶的IP地址..
請告訴我如何寫程序爲了這。
或告訴我任何其他邏輯這個應用程序顯示在其PC我的應用程序運行
如果要檢測已安裝的應用程序客戶端,您將需要設置一個服務或程序始終執行在背景中。爲什麼你需要檢查誰安裝了它?
爲了檢測它是否正在運行,您可以簡單地執行代碼,就像我在下面的程序中概述的一樣。
對於你的服務器,你需要運行一個這樣的線程;
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()
是一個阻塞調用,根據您的要求,您應該從一個單獨的線程或任務調用客戶端方法,並且有一些超時機制。沒有你的系統的進一步細節,很難說什麼是最好的。
請告訴我如何爲此編寫程序 – Kundan
請告訴我您到目前爲止如何嘗試編寫程序,您遇到了哪些問題,相關代碼以及您試圖執行的操作解決你的問題。 –