Java Multicast Socket不发送数据

时间:2016-06-01 13:16:42

标签: java sockets multicast

这是我的第一篇文章所以它可能没有很好的风格,但我试过...... 所以...我有两台机器,都运行Java。我希望他们能够运行这样的东西。

客户端:向侦听服务器发送多播。 服务器:服务器捕获多播并发送一个单播,其名称为服务器运行的本地计算机。 客户端:通过服务器地址接收单播,并使用其主机名创建一个列表。

但客户端甚至没有发送多播(我正在观看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();

1 个答案:

答案 0 :(得分:0)

ecle 在回复以下帖子时所做的评论帮助我解决了类似的问题: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"));