繁体   English   中英

Java:无法接收多播数据

[英]Java: Unable to receive multicast data

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

客户代码

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));
}

服务器代码

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);
}

我认为问题出在我设置界面的方式上。

有人可以在这里帮助我,清除我想了解的内容。

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

  • 端口号应为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM