无法接收Java中的UDP数据包

时间:2017-11-17 12:27:05

标签: java networking udp multicast

我试图在Java MulticastSocket上接收一些UDP数据包。

我可以看到数据包到达wireshark并且代码适用于其他人,但不适合我。

老实说,我不知道自己做错了什么。

我已禁用防火墙和防病毒软件。

我正在运行Windows 10和IntelliJ 2017.2.5。

我正在创建一个以portnumber(2000或2001)为参数的MulticastSocket。

我的JRE是1.8.0_152,我使用的是JetBrains提供的JDK。

这就是我创建MulticastSocket的方式:

this.socket = new MulticastSocket(this.portNum);
//this.socket = new MulticastSocket();
this.socket.setReceiveBufferSize(1 << 17);
this.socket.joinGroup(InetAddress.getByName(this.ip));

而且,在while循环中,我尝试接收这样的数据:

while(!this.socket.isClosed())
    {
        byte[] buffer = new byte[500];
        DatagramPacket incomingPacket = new DatagramPacket(buffer, buffer.length);
        try
        {
            this.socket.receive(incomingPacket);
            ...

2 个答案:

答案 0 :(得分:0)

要检查的事项是:

  1. 确保将UDP套接字绑定到要接收的接口。这与Windows和Linux不同。对于Windows:绑定到要接收的接口的IP地址。在Linux上绑定到0.0.0.0以在所有接口上接收。 (仅在特定接口上接收在Linux上是非常重要的。)

  2. 确保您的this.ip是您的多播地址,例如224.1.2.3。

答案 1 :(得分:-2)

问题已经解决,这是一个无关的并发问题。