Я пытаюсь имитировать UDP с помощью Java. Я отправляю файл с одного узла на другой. Это часть приемника:Java - закрытие UDP-сокета
server.setSoTimeout(10000);
while (true)
{
try
{
DatagramPacket received = new DatagramPacket(receivedData,receivedData.length);
server.receive(received);
out.write(received.getData());
}
catch (IOException e) {
break;
}
}
server.close();
Это решение работает, но по какой-то причине меня это не устраивает.
Отправитель отправляет все пакеты, а затем закрывает DatagramSocket. Получатель получает все пакеты, и он завершается, но он завершается из-за таймаута.
Так что если вы включите мой ресивер и ничего не выполняете в течение 10 секунд, мой приемник отключается, поэтому ничего не передается.
Есть ли способ прекратить цикл без указания таймаута?
Мне также интересно, существует ли способ для другого хоста установить соединение - что-то вроде ServerSocket.accept(), которое в основном ждет другого хоста для подключения. Но я решил использовать DatagramSocket, и я могу найти решение этой проблемы.
Кто-нибудь знает о методе, который будет выполнять это?
Подождите, чтобы вы хотели включить приемник, пока отправитель не отправит файл? –
UDP - протокол без установления соединения. Нет понятия соединения, а только отдельных пакетов. Также нет гарантии, что эти пакеты поступят в правильном порядке. Похоже, вы хотите, чтобы TCP, а не UDP ... –
@RileyCarney хорошо, что идея не использует таймаут, но чтобы указать, что все байты были отправлены –