UNIX UDP Передача данных с Java - PullRequest
0 голосов
/ 25 октября 2019

Я хочу создать поток UDP OUTPUT = UPLOAD с использованием Java. Я получу данные INPUT = SOURCE из именованного канала или смежного файла, открытого как поток ввода файла.

Моя проблема в том, что ВСЕ примеры UDP, которые я могу найти в Интернете, демонстрируют только сеансы консоли. Эхо-серверы и тому подобное.

Я пытаюсь создать способ для потоковой передачи непрерывного контента, такого как аудио / видео, и мне все равно, что теряется, я оставляю это на усмотрение моего пользователя. Однако мой код должен разрешать установку размера буфера и создание UDP-соединения.

В идеальном случае ХОРОШИЙ пример показывает, как выполнять подключения в режиме загрузки и выгрузки (режим клиента и режим сервера)

Можете ли вы предоставить код для этого или показать ссылку в интернете? Тот факт, что я не могу найти пример клиент / сервер UDP-потока, просто смешен. Использование UDP для проведения консольных сессий проверяет пределы здравомыслия человека! Это никогда не следует считать необязательным, не говоря уже о полезности. Код клиент / сервер, который мне нужен, должен быть совместим с GNU netcat. (для обеспечения правильной работы)

Я пробовал это с клиентом:

byte[] buffer = new byte[udpPacketSize]; // 4096
int len;
while ((len = standardInput.read(buffer)) != -1) {
    udpSocket.send(new DatagramPacket(buffer, len, host, port));
}

Но когда я прекращаю отправлять данные и отключаюсь, я не могу переподключиться, чтобы отправить больше данных. Я не уверен, что это именно то, что должно произойти, потому что 1) я совершенно не в своем элементе и 2) когда я отключаюсь после отправки данных, удаленный экземпляр GNU netcat не завершается, как в TCPmode.

ПОМОГИТЕ, мне нужен настоящий инженер по сетевым системам, чтобы показать мне, как реализовать UDP для практических приложений!

[и кто-нибудь, чтобы удалить весь этот мусор из Интернета, но давайтене усложняйте]

[далее: пожалуйста, не отвечайте библиотеками, пакетами или командами оболочки в качестве решения. я должен быть в состоянии выполнить на любом встроенном устройстве, на котором могут отсутствовать программы, а библиотеки не учат меня или кого-либо еще, как что-либо делать самостоятельно.]

1 Ответ

0 голосов
/ 25 октября 2019

Но когда я прекращаю отправку данных и отключаюсь, я не могу повторно подключиться, чтобы отправить больше данных.

Так работает режим GNU Netcat UDP, когда netcat и netcat наодна машина уходит ...

Ваш клиент должен прочитать ответ от сервера перед отключением. Поэтому, выступая в роли «посредника», вас это не должно волновать, если вы можете подключить локальный клиент вашего сетевого клиента к механизму ответа сервера.

Другими словами, вынеобходимо обеспечить двунаправленное полудуплексное соединение (1: 1), так как вы не управляете протоколом.

В качестве альтернативы вы можете использовать другой сервер UDP , отличный отГну Неткат. Я протестировал этот, и он работает без MUST-READ-REPLY-BUG , что означает, что в моем примере кода нет ничего плохого. Функция must-read-reply не имеет ничего общего с правильной реализацией сервера UDP (если только вы не должны подключаться к серверу, совместимому с Gnu Netcat 0.7.1).

Ничего не стоит, что он не очень полезениспользовать режим UDP-сервера Gnu Netcat без драйвера (скрипта / программы), особенно если вам нужен непрерывный процесс, поскольку вы можете заблокировать удаленный клиент без доступа до тех пор, пока процесс не будет вызван заново.

...