2014-09-19 3 views
0

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

У меня есть все, что работает. Когда я тестирую локальный хост, он работает в 100% случаев. Когда я отправляю его с моего ноутбука на компьютер, он работает 100% времени. Однако, когда я отправляю его с моего компьютера на свой ноутбук, он не работает.

У меня есть несколько отладочных инструкций System.out для проверки некоторой информации, которую я отправляю. Я знаю, что текстовый файл должен принимать 7 пакетов. Однако, когда я отправляю его с моего компьютера на свой ноутбук, он говорит, что я отправляю 46 пакетов.

Моя первоначальная мысль заключается в том, что, возможно, пакеты отправляются из строя. Первый пакет, который я отправляю, указывает количество пакетов, которые должен ожидать приемник. Я подумал, что, может быть, почему-то «46» может указать столицу «F», поэтому я удалил всю столицу «F», и она все еще говорит, что я отправляю 46 пакетов.

Я подумал, что, возможно, я отправлял слишком много информации сразу, поэтому я использовал Thread.sleep(), чтобы дать моему приемнику время идти в ногу - это тоже не сработало.

Наконец, я прочитал документацию Oracle и некоторые сообщения в Интернете и узнал, что UDP ненадежен. Поэтому я предполагаю, что это возможно. Тем не менее, я хочу просто проверить, что это может быть проблемой.

Или, если у кого-то есть лучшая идея относительно того, что могло бы вызвать проблему, которая была бы удивительной!

Спасибо за вашу помощь :)

ответ

0

Да, UDP является ненадежным протоколом. Сообщения UDP могут быть потеряны, и ни отправитель, ни получатель не получат уведомления.

7 пакетов становятся 46 пакетов, как правило, из-за fragmentation на уровне IP-пакета. Уровень протокола под IP (например, физические пакеты ethernet, wifi-пакеты и т. Д.) Обычно имеет жесткий предел для самого большого пакета IP, который может быть отправлен «за один раз», и аналогичные ограничения накладываются сетевыми маршрутизаторами, шлюзами и т. Д. Если пакет IP, который больше, чем предел посылается, две вещи могут случиться:

  • Пакет IP может превратился в «фрагменты», которые должны быть собраны приемником.

  • Промежуточное оборудование может отправить сообщение ICMP отправителю, сообщив ему отправить более мелкие IP-пакеты.

В любом случае, Конечный результат является то, что число IP пакетов, необходимых для передачи заданного размера UDP сообщения может меняться, в зависимости от сети.

Конечно, если сообщение UDP должно быть отправлено как несколько IP-пакетов, а в сети есть локальная перегрузка, что увеличит вероятность наличия пакетов и, следовательно, приведет к сбою сообщений.


Но в сущности, UDP не является надежным. Если вам нужна надежность, простым решением является использование TCP вместо этого.

+0

Удивительный ответ, спасибо! Я решил проверить это. Я не уверен, что это было просто совпадение, но, похоже, это закончилось. Я попробовал это с моего ноутбука на свой компьютер с тонны видео Youtube, и UDP Receiver сказал, что он получил 106 пакетов, и, в конечном итоге, сообщение не получило должным образом. Я выключил их и отправил их снова, и это сработало. Я сделал тот же эксперимент с моего компьютера на свой ноутбук, и у меня были те же результаты. Опять же, не уверен, что это совпадение, но из того, что вы сказали, и моего эксперимента, кажется, это ответ на мою проблему. Спасибо :) – BearForceOne

+0

@BearForceOne - Это указывает на потерю пакетов как на проблему. Если вы потеряете один пакет, вы потеряете полное сообщение UDP, и, следовательно, передача файла не удастся. –

Смежные вопросы