По всей вероятности, использование первым устройством терминов «порт клиента» и «порт сервера» не относится к двум разным портам в клиентском устройстве. Вместо этого «клиентский порт» относится к порту, который будет использоваться в качестве точки отправления в первом устройстве, а «порт сервера» относится к удаленному порту назначения на удаленном устройстве, к которому будет относиться исходящий трафик первого устройства. отправлено.
Второе устройство, с другой стороны, вероятно, по сути является "прослушивающим" устройством. Он знает только UDP-порт, который ему необходим для прослушивания, и ожидает поступления запросов, адресованных этому порту, откуда угодно.
Итак, я буду называть «первое устройство» клиентом, а «второе устройство» сервером.
Каждая датаграмма, отправляемая с клиента на сервер, содержит два набора адресной информации:
1) IP-адрес и порт назначения, и
2) Обратный IP-адрес и порт.
Сервер может использовать recvfrom () для извлечения полного обратного адреса (включая номер порта) из каждого входящего запроса.
Таким образом, нам действительно нужен только один номер порта, который предварительно добавляется и согласовывается как сервером, так и клиентом: номер порта сервера.
Клиент мог бы по своему выбору использовать любой случайный номер порта в качестве своего исходного порта (но по соглашению он, вероятно, предпочел бы избежать любого из хорошо известных зарезервированных портов, чтобы избежать потенциальных проблем взаимодействия), и сервер мог динамически читать возвращать адресную информацию из каждого входящего запроса и динамически отправлять его ответы в правильный пункт назначения.