UDP 多播在 2 台不同的 PC 上不起作用
UDP Multicast doesn't work in 2 different PCs
我准备了一个多播客户端服务器。它在同一台计算机上工作,但是当我使用两台不同的 PC 时,其中 none 似乎收到任何东西。
我在两台计算机上都禁用了防火墙。
代码如下:
服务器:
public void send(byte[] sendThis) {
Thread t = new Thread() {
DatagramSocket socket;
InetAddress group;
@Override
public void run() {
try {
socket = new DatagramSocket();
group = InetAddress.getByName("230.0.0.0");
DatagramPacket packet = new DatagramPacket(sendThis, sendThis.length, group, 4446);
socket.send(packet);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
};
t.start();
try {
t.join(100);
} catch (InterruptedException e) {
}
}
客户:
public byte[] receive() {
MulticastSocket socket = null;
byte[] buf = new byte[2000];
byte[] received = new byte[2000];
try {
socket = new MulticastSocket(4447);
InetAddress group = InetAddress.getByName("230.0.0.0");
socket.joinGroup(group);
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
// received = packet.getData();
received = new String(packet.getData(), packet.getOffset(), packet.getLength()).getBytes();
socket.leaveGroup(group);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
return received;
}
在另一台机器上更改了端口(服务器4447,客户端4446)
看来 AP 需要稍微更改一下配置:应该启用 IGMP(Internet 组管理协议)。
有些 AP 不支持此功能(我的不支持),所以我不得不在不同的网络中尝试。
我准备了一个多播客户端服务器。它在同一台计算机上工作,但是当我使用两台不同的 PC 时,其中 none 似乎收到任何东西。 我在两台计算机上都禁用了防火墙。
代码如下:
服务器:
public void send(byte[] sendThis) {
Thread t = new Thread() {
DatagramSocket socket;
InetAddress group;
@Override
public void run() {
try {
socket = new DatagramSocket();
group = InetAddress.getByName("230.0.0.0");
DatagramPacket packet = new DatagramPacket(sendThis, sendThis.length, group, 4446);
socket.send(packet);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
};
t.start();
try {
t.join(100);
} catch (InterruptedException e) {
}
}
客户:
public byte[] receive() {
MulticastSocket socket = null;
byte[] buf = new byte[2000];
byte[] received = new byte[2000];
try {
socket = new MulticastSocket(4447);
InetAddress group = InetAddress.getByName("230.0.0.0");
socket.joinGroup(group);
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
// received = packet.getData();
received = new String(packet.getData(), packet.getOffset(), packet.getLength()).getBytes();
socket.leaveGroup(group);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
return received;
}
在另一台机器上更改了端口(服务器4447,客户端4446)
看来 AP 需要稍微更改一下配置:应该启用 IGMP(Internet 组管理协议)。
有些 AP 不支持此功能(我的不支持),所以我不得不在不同的网络中尝试。