не может отправлять большие файлы изображений через UDP - PullRequest
1 голос
/ 22 февраля 2012

Я пытаюсь отправить изображение по UDP, используя JAVA.Мне удалось реализовать отправителя и получателя, и он работает для небольшого изображения (18 КБ в этом случае).Когда я пытаюсь отправить изображение большего размера (2 МБ), получатель, похоже, заклинивает после отправки нескольких сотен датаграмм.

Вот цикл в моем приемнике, который получает каждый пакет от отправителя.

Код перед этим циклом просто получает номер порта от пользователя, устанавливает сокет и получает один отправитель от пакета, который указывает, сколько пакетов будет отправлено.Это хранится в packageNum.

Может кто-нибудь придумать причину, почему он останавливается при попытке отправить большие изображения?Спасибо

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

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

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

1 голос
/ 22 февраля 2012

Вы имеете в виду, что "приемник, кажется, застревает после получения нескольких сотен дейтаграмм", а не отправки , верно?Если это так, то вы можете стать жертвой печально известной потери пакетов UDP!:) Есть два варианта:

  1. Замедление скорости передачи.
  2. Реализация надежного UDP.

Первый легче сделать, и этодолжно позволить вам быстро определить, если вы испытываете потерю пакета.Запустите несколько тестов и посмотрите, получаете ли вы одинаковое количество байтов, изменяя скорости передачи (т.е. оставляйте небольшой перерыв между отправкой каждого пакета).Если вы обнаружите разницу в потере пакетов, то внедрите надежный UDP и запросите повторную передачу непоследовательных или отсутствующих пакетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...