我有一个UDP广播的行为问题,java的UDP广播问题
public static final int PORT = 34567;
public static void main(String[] args) throws IOException,
InterruptedException {
if (args.length > 0 && args[0].equals("server")) {
int port;
if (args.length >= 2) {
port = Integer.parseInt(args[1]);
} else {
port = PORT;
}
DatagramSocket sr = new DatagramSocket(port, InetAddress.getLocalHost());
while (true) {
byte[] buf = new byte[256];
DatagramPacket pct = new DatagramPacket(buf, buf.length);
sr.receive(pct);
String s = new String(buf);
System.out.println(s.replaceAll("\0", "") + " " + pct.getAddress().toString());
}
} else {
DatagramSocket ss = new DatagramSocket();
ss.setBroadcast(true);
byte[] b = new byte[100];
DatagramPacket p = new DatagramPacket(b, b.length);
p.setAddress(InetAddress.getByAddress(new byte[] { (byte) 255,
(byte) 255, (byte) 255, (byte) 255 }));
p.setPort(PORT);
int i = 0;
while (true) {
String s = new Integer(i++).toString();
System.out.println(s);
b = s.getBytes();
p.setData(b);
ss.send(p);
Thread.sleep(1000);
}
机器A,当我运行服务器和它同时接收多个数据包的客户,所以我下面的输出
0 /192.168.253.5
0 /192.168.253.5
1 /192.168.253.5
1 /192.168.253.5
2 /192.168.253.5
2 /192.168.253.5
在其他机器上B当我这样做时,服务器根本没有收到任何数据包
当我运行机器A上的客户机和机器B上的服务器时,服务器接收数据包
,当我在B机器上运行的机器A和客户端服务器,服务器没有收到任何数据包
我猜想,这取决于发送UDP套接字的本地地址,因为每一台机器连接到几个网络,并且本地地址是随机选择的(它是真的吗?),它只向本地地址所属的网络发送广播,对吗?
如果是这样,我怎么能发送广播到所有网络电脑连接? 也为什么收到几个相同的数据包(第一种情况)
没有防火墙,但机器A连接到多个网络(192.168.0.123/24,192.168.159.17/24等),机器B连接到多个网络,但它们是直接可见的,因此不涉及路由器 – 2011-04-07 23:26:09
我想你需要使用组播套接字并使用组...看看@ http://www.codeproject.com/KB/IP/multicast.aspx – 2011-04-07 23:42:31