У меня проблема с поведением широковещательной передачи 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, сервер получает пакеты
, когда язапустить сервер на машине A и клиент на машине B, сервер не получает пакетов
Я полагаю, что это зависит от локального адреса отправляющего сокета udp, так как каждая машина подключена к нескольким сетям, а локальный адресвыбран случайным образом (верно ли это?), и он только отправляет широковещательные сообщения в сеть, к которой принадлежит локальный адрес, верно?
, если это так, как я могу отправлять широковещательные рассылки во все сети, к которым подключен ПК?и почему получено несколько одинаковых пакетов (первый случай)