Сообщения UDP от Java принимаются только при первом запуске - PullRequest
0 голосов
/ 16 июня 2020

Я использую DatagramSocket Java для отправки сообщений UDP с Java на указанный порт c на моем локальном хосте. Я слушаю этот порт с помощью netcat: nc -ul 9122.

При первом запуске моего Java кода (после запуска n c) сообщение получено и отображается в моей оболочке. Друг на друга бегают - сообщения не приходят. Подойдет только перезапуск n c.

Это мой Java код:

public static void main(String[] args) throws IOException, InterruptedException {
    byte[] buf = "Hi There\n".getBytes();

    InetAddress address = InetAddress.getLocalHost();
    DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 9122);

    DatagramSocket datagramSocket = new DatagramSocket();
    datagramSocket.connect(InetAddress.getLocalHost(), 9122);
    if(datagramSocket.isConnected()) {
        datagramSocket.send(packet);
        Thread.sleep(500);
        datagramSocket.send(packet);
        Thread.sleep(500);
        datagramSocket.send(packet);

    }
}

Что я пропустил? Спасибо

1 Ответ

1 голос
/ 17 июня 2020

Похоже, это особенность ncat. После получения одного пакета UDP он принимает пакеты только от того же хоста и порта источника. Это похоже на соединение: экземпляр ncat обрабатывает пакеты только от одного клиента.

Когда вы запускаете программу Java, она выбирает произвольный локальный порт, и когда вы перезапускаете его, вы получит другой порт. Вы можете установить фиксированный локальный порт, передав его конструктору DatagramSocket:

DatagramSocket datagramSocket = new DatagramSocket(12345);
...