Java:无法接收多播数据 [英] Java: Unable to receive multicast data

查看:96
本文介绍了Java:无法接收多播数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试测试多播客户端服务器应用程序,但我的客户端无法接收任何数据。我阅读了教程,无法找到任何方法。你能帮助我吗?

I am trying to test a multicast client server application but my client is unable to receive any data. I read through the tutorials and cant find any way. Can you help me out here.

MulticastSocket socket = new MulticastSocket("9000");
socket.setInterface(InetAddress.getLocalHost());
socket.joinGroup("237.0.0.1");

while(true)
{
    byte ab[] = new byte[100];
    DatagramPacket packet = new DatagramPacket(ab, ab.length);
    socket.receive(packet);
    System.out.println("Got packet " + Arrays.toString(ab));
}



服务器代码



Server Code

MulticastSocket socket = new MulticastSocket("9000");
socket.setInterface(InetAddress.getLocalHost());

socket.joinGroup("237.0.0.1");

byte index = 0;
while(true)
{
    byte[] bt = new byte[100];
    Arrays.fill(bt, (byte)index++);
    DatagramPacket packet = new DatagramPacket(bt, 100,"237.0.0.1", "9000");
    socket.send(packet);
    System.out.println("sent 100 bytes");
    Thread.sleep(10*1000);
}






我在想这个问题与我设置界面的方式一样。


I am thinking the problem is with the way I am setting the interface.

有人可以帮我解决这个问题,并明白我想要了解的内容。

Could someone help me out here and clear what am I missing to understand.

推荐答案

您的代码无法在我的系统上编译,但是当我执行以下更改(如下)时,它按预期工作:

Your code does not compile on my system, but when I did the following changes (below) it works as expected:


  • 端口号应为 int

MulticastSocket socket = new MulticastSocket(9000);


  • Ip地址应指定为 InetAddress 使用:

    InetAddress.getByName("237.0.0.1")
    


  • 除此之外,请检查您的防火墙是否阻止了流量

    public static void main(String[] args) throws Exception {
    
        final InetAddress group = InetAddress.getByName("237.0.0.1");
        final int port = 9000;
    
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    MulticastSocket socket = new MulticastSocket(port);
                    socket.setInterface(InetAddress.getLocalHost());
                    socket.joinGroup(group);
    
                    DatagramPacket packet = new DatagramPacket(new byte[100], 100);
                    while(true) {
                        socket.receive(packet);
                        System.out.println("Got packet " + 
                                Arrays.toString(packet.getData()));
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    MulticastSocket socket = new MulticastSocket(port);
                    socket.setInterface(InetAddress.getLocalHost());
                    socket.joinGroup(group);
    
                    byte[] bt = new byte[100];
                    byte index = 0;
                    while(true) {
                        Arrays.fill(bt, (byte) index++);
                        socket.send(new DatagramPacket(bt, 100, group, port));
                        System.out.println("sent 100 bytes");
                        Thread.sleep(1*1000);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
    

    输出:

    sent 100 bytes
    Got packet [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    sent 100 bytes
    Got packet [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
    sent 100 bytes
    Got packet [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
    sent 100 bytes
    Got packet [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
    sent 100 bytes
    Got packet [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
    sent 100 bytes
    Got packet [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
    sent 100 bytes
    Got packet [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
    ^C
    

    这篇关于Java:无法接收多播数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆