LAN上的组播IP地址

时间:2013-08-16 10:50:05

标签: java sockets multicast

我正在对等网络上创建一个聊天应用程序。

我正在尝试编写代码,以便我可以检测哪些计算机安装了应用程序以及它是否正在运行(这样我就可以显示谁在线)。

我认为该程序将多播运行该程序的IP地址,其他人将检测该多播IP并将其添加到列表中以显示在线用户..

请告诉我如何为此编写程序。

或告诉我此应用程序的任何其他逻辑,以显示我的应用程序正在运行的PC

1 个答案:

答案 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()是一个阻塞调用,根据您的要求,您应该从单独的线程或任务调用客户端方法,并具有一些超时机制。如果没有系统的进一步细节,很难说什么是最好的。