我有一個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