У меня очень похожее поведение, как описано здесь :
- работает на Mac Book Pro, Snow Leopard
- использование многоадресных сокетов для отправки и получения пакетов на локальном хосте
Я использую Eclipse и наблюдал следующее поведение при запуске клиента / сервера из рабочей области:
- если беспроводной интерфейс (аэропорт) запущен и работает, клиент не принимает пакеты
- если интерфейс выключен, все работает как положено
Но я не понимаю:
- если я создаю JAR и запускаю код на любой консоли -> все хорошо! Просто Затмение, похоже, не любит аэропорт; -)
- в зависимости от того, к какой беспроводной сети я подключен, вышеуказанное поведение может измениться, т. Е. Оно также работает, если включен аэропорт (например, @ Uni)
У кого-нибудь есть идеи по этому поводу?
Приветствия
Ниже простой код для сервера / клиента:
@Override
public void run() {
String multicastAddress = "224.0.0.2";
int multicastPort = 8000;
MulticastSocket socket = null;
try {
try {
InetAddress multicastGoup = InetAddress.getByName(multicastAddress);
socket = new MulticastSocket(multicastPort);
socket.joinGroup(multicastGoup);
} catch (IOException e) {
e.printStackTrace();
return;
}
byte[] buffer = new byte[1024];
while (true) {
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
System.out.println("BEFORE RECEIVE: listening on " + multicastAddress + ":" + multicastPort);
socket.receive(packet);
System.out.println("PACKET RECEIVED");
System.err.println("Client received: " + new String(packet.getData()));
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
socket.close();
}
}
Сервер:
public void run() {
MulticastSocket socket = null;
try {
String multicastAddress = "224.0.0.2";
int multicastPort = 8000;
InetAddress multicastGoup = InetAddress.getByName(multicastAddress );
socket = new MulticastSocket(multicastPort);
socket.joinGroup(multicastGoup);
byte[] data = new String("Teststring").getBytes();
while (true) {
socket.send(new DatagramPacket(data, data.length, multicastGoup, multicastPort));
System.out.println("SERVER: Datagram sent");
Thread.sleep(1000);
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
socket.close();
}
}