Обратите внимание, что этот ответ посвящен использованию UDP-сокетов.Если вы передумаете использовать TCP-сокеты, это почти не будет иметь значения.
- Нужно ли мне кодировать клиент и сервер?
Поскольку вы решили использовать UDP (справедливый выбор, если ваши данные не очень важны и выигрывают от меньших задержек, чем надежная связь), у вас нет большого выбора здесь: a "Сервер "- это фрагмент кода для приема пакетов из сети, а ваш" клиент "- для отправки пакетов в сеть.UDP не предоставляет никакого механизма для взаимодействия сервера с клиентом (в отличие от TCP, который устанавливает двухсторонний сокет).В этом случае, если вы хотите иметь двустороннюю связь между двумя вашими хостами, каждому из них потребуется код сервера и клиента.
Теперь вы можете выбрать использовать широковещательные рассылки UDP, гдеоба клиента слушают и отправляют по широковещательному адресу (обычно 192.168.1.255 для домашних сетей, но это может быть что угодно и настраивается).Это немного сложнее для написания кода, но это устранит необходимость в конфигурации клиент / сервер и может быть расценено как больше plug-n-play для ваших пользователей.Однако обратите внимание, что это не будет работать через Интернет.
В качестве альтернативы, вы можете создать гибридный метод, в котором хосты обнаруживаются путем широковещательной передачи и прослушивания широковещательных рассылок, но затем, когда хосты выбраны, вы используете хост для хоста одноадресной передачи.Розетки.Вы можете предоставить запасной вариант для ручного указания сетевых настроек (для каждого хоста / порта удаленного доступа), чтобы он мог работать через Интернет.
Наконец, вы можете предоставить настоящую роль «сервера», к которой подключаются все клиенты.Затем сервер узнает, какие клиенты подключены к нему, и, в свою очередь, попытается подключиться к ним.Это сервер более высокого уровня, а не уровня сокетов.Оба хоста по-прежнему должны иметь код отправки (клиент) и получения (сервер) пакета.
- Должен ли я использовать один и тот же сокет для отправки и получения?
Ну, так как вы используете UDP, у вас действительно нет выбора.UDP не устанавливает какого-либо постоянного соединения, с которым они могут обмениваться сообщениями.См. Выше пункт для получения более подробной информации.
- Должен ли я отправлять и получать данные через один и тот же порт?
В свете вышеприведенного вопроса,Ваш вопрос может быть лучше сформулирован так: «должен ли каждый хост слушать один и тот же порт?».Я думаю, что это, безусловно, облегчит вам кодирование, но это не обязательно.Если вы этого не сделаете и выберете третий вариант первого пункта, вам потребуется поле данных «подключиться ко мне через этот порт» в первом сообщении «клиента» серверу.