Ter*_*ana 2 java macos udp multicast
在Mac OS X(Lion,10.7.2,Java版本"1.6.0_29")下处理Java应用程序时,我在尝试发送多播UDP数据报时遇到了一个奇怪的问题.数据包仅在一个NIC上发送,我无法控制哪个.
以下示例代码说明了我要执行的操作:
public class MCast {
public static void main(String[] args) throws IOException {
InetAddress multicastAddr = InetAddress.getByName("224.0.0.1");
int port = 58680;
byte[] data = "test".getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, multicastAddr, port);
MulticastSocket socket = new MulticastSocket();
socket.joinGroup(multicastAddr);
socket.setNetworkInterface(NetworkInterface.getByName("en0"));
socket.send(packet);
System.out.println("Packet sent.");
}
}
Run Code Online (Sandbox Code Playgroud)
在执行此代码时,我使用Wireshark检查en0上发出的所有流量.在指定的端口上没有发送数据包.但是,所述数据包确实出现在en1的跟踪上.
当我禁用en1时,数据包在en0上正常运行.
我在这里不知所措.有谁知道发生了什么?
组播输出接口由组加入时的当前路由表决定.在大多数情况下,这意味着默认路线,因此en0.添加显式路由会有所帮助,但您可以将代码中的两行反转为:
socket.setNetworkInterface(NetworkInterface.getByName("en0"));
socket.joinGroup(multicastAddr);
Run Code Online (Sandbox Code Playgroud)
此外,bind()如果您只是发送而不是收听该多播流量,则不需要加入(也不)该组.相反,connect()到组地址.
| 归档时间: |
|
| 查看次数: |
1974 次 |
| 最近记录: |