Как я получаю порт UDP отправителя в C?

Я понял это сейчас. Проблема была в том, что libQt5Core.so.5 был собран с тегом .note.ABI, версия которого несовместима с тем, что WSL идентифицирует как (4.4), но контейнер докера был совместим (4.9) .

Аналогично тому, что происходит здесь: https://github.com/Microsoft/WSL/issues/3023

5
задан Scott 31 March 2009 в 19:27
поделиться

5 ответов

Пятый аргумент может быть брошен к struct sockaddr_in, и там sin_port число удаленного порта.

0
ответ дан 18 December 2019 в 08:31
поделиться

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

1
ответ дан 18 December 2019 в 08:31
поделиться

recvfrom (носок, buf, PKTSZ, 0, &client, len);

Адрес сокета отправителей хранится в клиентской переменной Вашего кода. Получить доступ к использованию порта отправителей sockaddr_in вместо sockaddr. Пример:

sockaddr_in client;
int len = sizeof(client);
recvfrom(sock, buf, PKTSZ, 0, (struct sockaddr *)&client, (socklen_t *)&len);
int port = ntohs(client.sin_port);

Ссылки: руководство Beej по сетевому программированию и MSDN

12
ответ дан 18 December 2019 в 08:31
поделиться

recvfrom (), как предполагается, возвращает это Вам в пятом аргументе (структура sockaddr*).

Править: Используйте что-то вроде этого

struct sockaddr_in client;

recvfrom(... (struct sockaddr*)&client ...);

client.sin_port должен быть порт отправителя.

6
ответ дан 18 December 2019 в 08:31
поделиться

Кастинг клиента к sockaddr_in решает мою проблему.

0
ответ дан 18 December 2019 в 08:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: