我试图在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);
...
答案 0 :(得分:0)
要检查的事项是:
确保将UDP套接字绑定到要接收的接口。这与Windows和Linux不同。对于Windows:绑定到要接收的接口的IP地址。在Linux上绑定到0.0.0.0以在所有接口上接收。 (仅在特定接口上接收在Linux上是非常重要的。)
确保您的this.ip
是您的多播地址,例如224.1.2.3。
答案 1 :(得分:-2)
问题已经解决,这是一个无关的并发问题。