Я, я разрабатываю мобильное приложение (Android), которое работает с серверным приложением на ПК. Мне нужно использовать многоадресные датаграммы UDP для отправки информации на смартфон, подключенный к зоне WIFI. У меня есть два модуля: Первый модуль - многоадресный сервер UDP.Ядро многоадресной рассылки Java не получено из localhost
private void connection() {
System.setProperty("java.net.preferIPv4Stack", "true");
String msg = "Hello";
InetAddress group = null;
try {
group = InetAddress.getByName("224.0.2.0");
} catch (UnknownHostException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
}
while (true) {
MulticastSocket s = null;
try {
s = new MulticastSocket(6789);
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
try {
s.joinGroup(group);
s.setTimeToLive(200);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
DatagramPacket hi = new DatagramPacket(msg.getBytes(),
msg.length(), group, 6789);
try {
s.send(hi);
System.out.println(hi.toString());
s.leaveGroup(group);
s.close();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Эта функция (вверх) создать MulticastSocket и информацию об отправке на адрес многоадресной 224.0.2.0:6789.
Второй модуль представляет собой Java-приемник для UDP-пакетов, отправленных первой программой.
byte[] b = new byte[1024];
DatagramPacket dgram = new DatagramPacket(b, b.length);
MulticastSocket socket = null;
try {
socket = new MulticastSocket(6789);
} catch (IOException e) {
Log.e("WIFI_E", e.getMessage());
} // must bind receive side
try {
socket.joinGroup(InetAddress.getByName("224.0.2.0"));
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//while(true) {
try {
socket.receive(dgram);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // blocks until a datagram is received
Toast.makeText(getApplicationContext(), "Received " + dgram.getLength() +
" bytes from " + dgram.getAddress(), Toast.LENGTH_LONG);
dgram.setLength(b.length); // must reset length field!
//}
Это мой код. Теперь проблема. Когда я запускаю сервер (сторона ПК), UDP-пакеты видны только на локальной машине (тестируется с Wireshark), а smarthpone или другой компьютер не может их получить. Я пытаюсь отключить брандмауэр Windows и антивирус, но не работает. Я понятия не имею, почему пакеты не перенаправлены правильно в сети. Может быть, некоторые ошибки в моем коде? Спасибо вам.
Как связаны разные машины? Возможно ли, что ваш маршрутизатор настроен не на отправку многоадресной рассылки? – xaxxon
Вы уже нашли решение? Я борюсь с аналогичным проектом, который почти то же самое и не может заставить его работать. Примечание: Использование * nmap * Я обнаружил, что указанный порт остается закрытым при запуске программы. – s3lph