перед вызовом connect () можно узнать номер порта? - PullRequest
1 голос
/ 04 января 2012

Я пишу клиент-серверное приложение, используя API программирования socking.

На стороне клиента, перед вызовом connect (), могу ли я узнать, какой номер порта я буду использовать?Теперь у меня есть дескриптор файла сокета от вызова socket ().Я пытался использовать getsockname, но получил только 0 для номера порта.

Ответы [ 3 ]

2 голосов
/ 04 января 2012

Адрес / порт не назначены, пока вы не наберете bind(2) (с портом = 0 и / или адресом = 0).После привязки вы можете использовать getsockname.

2 голосов
/ 04 января 2012

Я настоятельно рекомендую прочитать Руководство Биджа по сетевому программированию , если вы совершенно новичок в программировании сокетов.

Но чтобы ответить на ваш вопрос (я думаю) с помощью сокета TCP, вам нужнознать, к какому удаленному порту вы подключаетесь (то есть, что сервер тоже делает bind()).Однако обычно вы (программист клиентского приложения) не указываете порт, используемый сервером для обратной связи.Он выбирается случайным образом стеком TCP на основе номеров портов, доступных клиенту.

0 голосов
/ 04 января 2012

Вы можете явно позвонить bind(), даже с номером порта 0.После этого getsockname() должен дать вам порт.

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