2014-11-19 3 views
0

Я пишу сокет TCP-клиента, используя C/C++. Как я могу указать определенный номер порта в моем клиентском сокете? Предположим, что клиентский сокет будет иметь два соединения с одним и тем же сервером, , а для второго подключения должен использоваться тот же локальный (клиентский) номер порта для подключения. Как передать параметр в мой код?Укажите номер порта в гнезде TCP-клиента

номер локального порта определяется сразу после подключения()? Или он хранится в sock_new = socket()?

Заранее благодарен.

+1

Возможно, вы можете связать() сокет с конкретным портом на стороне клиента, но я не знаю, зачем вам это нужно; что случилось с тем, что второе соединение использует другой клиентский порт, чем первый? Конечно, они будут подключаться к одному серверному порту. –

ответ

0

Скажем, что у сокета-клиента будет два соединения с одним и тем же сервером, а для второго соединения должен использоваться тот же локальный (клиентский) номер порта для подключения.

Невозможно. Что-то о кортеже (источник IP, исходный порт, целевой IP, целевой порт} должен быть уникальным, чтобы идентифицировать соединение.

Какую актуальную проблему вы пытаетесь решить?

+0

Извините, что не прояснилось. Второе соединение начинается сразу после первого завершения. Итак, я думаю, что он все равно может получить доступ к тому же порту (так как первое соединение закрыто) – Yao

+0

Ну, вы можете попробовать сохранить локальный порт первого сокета (с 'getsockname()' и привязать второй сокет к тому же локальный порт, после установки 'SO_REUSEADDR' в сокете, но правила TCP диктуют период TIME_WAIT между двумя успешными использованиями исходящего порта с одной и той же целью, поэтому почти наверняка это не сработает. следует просто открыть первое соединение. Используйте пул соединений. – EJP

Смежные вопросы