Java 多播套接字未发送数据

Java Multicast Socket not sending out data

这是我的第一个 post 所以它可能不太时尚,但我试过了...... 所以...我有两台机器,都是运行ning Java。我希望他们 运行 像这样。

客户端:向监听服务器发送组播。 服务器:服务器捕获多播并发送回单播,其中包含服务器 运行s 所在的本地机器的名称。 客户端:接收带有服务器地址的单播,并用它们的主机名制作一个列表。

但是客户端甚至不发送组播(我在看wireshark抓包) 它只在我将 230.0.0.1 作为多播地址时发送一些东西,但是服务器没有收到数据包。

编辑:当我向服务器发送单播数据包时,它响应良好。

这是我的代码:

try
    {
        //The client runs on LeJOS EV3 so I used their classes a bit
        LCDOutputStream lcd = new LCDOutputStream();
        PrintStream p = new PrintStream(lcd);
        while(true)
        {
            if(Button.waitForAnyPress() == Button.ID_ESCAPE)
            {
                break;
            }

            byte[] buf = this.writeString("get_ip");
            DatagramSocket sender = new DatagramSocket();

            DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("230.0.0.1"), 5555);
            sender.send(packet);
            sender.close();
            p.println("Sent Multicast");
        }
        p.close();
        lcd.close();
    }
    catch(Exception e)
    {
        console.printException(e);
    }

这是服务器代码:

MulticastSocket s = new MulticastSocket(5555);
                s.joinGroup(InetAddress.getByName("225.1.1.1"));
                while(true)
                {
                    try
                    {
                        /*
                         * 225.1.100.1
                         *
                        DataSender.Impl.reply("225.1.100.1", 5555, InetAddress.getLocalHost().getHostName(), "get_ip");*/                       
                        byte[] buf = new byte[256];
                        DatagramPacket p = new DatagramPacket(buf, buf.length);
                        s.receive(p);
                        System.out.println("DEBUG: received request");
                    }
                    catch(IOException e)
                    {
                        e.printStackTrace();
                        break;
                    }
                }
                s.close();

ecle 对以下 post 的回应的评论帮助我解决了类似的问题:Java Multicast sample program is unable to deliver packets within LAN (across hosts)。就我而言,添加 setInterface(<server address>); 有效。例如:

MulticastSocket s = new MulticastSocket(5555);
s.setInterface(<server address>);
s.joinGroup(InetAddress.getByName("225.1.1.1"));