Проблема клиента C ++ UDP - PullRequest
2 голосов
/ 07 июля 2011

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

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

EDIT: ХОРОШО. Я перепробовал все возможные сценарии и до сих пор не нашел решения. Я начал думать о том, что, возможно, проблема не связана с программой, может быть, это связано с моими сетевыми подключениями. Компьютер, который я использую в качестве сервера, напрямую подключен к маршрутизатору с помощью Ethernet, но другие компьютеры используют беспроводное соединение. Я не уверен, если это имеет значение? Я также попытался запустить серверное приложение на одном из моих беспроводных компьютеров, но другие компьютеры не смогли подключиться к нему. Похоже, проблема связана с беспроводной сетью.

1 Ответ

0 голосов
/ 07 июля 2011

хмм, без подробностей вашего протокола, трудно сказать, в чем может быть проблема, однако вот несколько советов:

  1. В протоколе между сервером и клиентом убедитесь, что клиент, запрашивающий файл, запрашивает его правильно.
  2. Далее, между сервером и вторым клиентом, проверьте, что ваш протокол отправляет правильный запрос
  3. Убедитесь, что второй клиент генерирует правильный ответ (например, у меня есть файл или нет)
  4. Убедитесь, что сервер правильно обрабатывает этот ответ
  5. Убедитесь, что сервер отправляет правильный IP-адрес второго клиента первому
  6. Убедитесь, что первый клиент имеет сетевое подключение ко второму клиенту (например, брандмауэр и т. Д.)
  7. Убедитесь, что логика обработки в клиенте правильно обрабатывает ответ.

Как правило, вы должны быть в состоянии сделать вышеупомянутое, вставляя соответствующую регистрацию в коде клиент / сервер и простой telnet / ping и т. Д. От первого клиента ко второму.

Просто переместив что-то из комментариев ... Реализовать надежный протокол через UDP довольно сложно, однако хорошей отправной точкой является предположить, что ваш код не работает, и сначала исследовать (как описано выше) ...

...