Номер порта, к которому он сообщает, - тот, к которому подключен клиент. И это будет случайный номер порта. Если (как кажется из вашего вопроса) у вас есть bind
вызов в клиенте, который выглядит так же, как тот, что на сервере, то я удивлен, что это успешно, так как сервер уже привязал себя к этому порту и только одну вещь может быть привязан к данному порту одновременно.
Пожалуйста, оставьте свой код клиента. Вопреки тому, что подразумевает ваш вопрос, я не думаю, что вы bind
обращаетесь к порту на стороне клиента. Могу поспорить, что ты просто connect
Инг. Теперь, в общем, это то, что вы должны делать. Таким образом, тот факт, что вы озадачены результатами, означает, что вы не совсем понимаете, что именно происходит. Результаты, которые вы видите, вполне ожидаемы и нормальны.
Вот объяснение того, что происходит:
TCP-соединение однозначно идентифицируется (глобально уникально, поскольку ни в одном другом TCP-соединении во всем мире не будет такого идентификатора (хотя это не совсем верно для NAT и частных IP-диапазонов)) этими 4 частями информация:
- ip клиента
- клиентский порт #
- ip сервера
- порт сервера #
Когда ваш сервер сообщает о соединении, он печатает первые два значения, потому что они возвращаются вызовом accept
. Когда вы делаете вызов bind
на сервере, вы указываете значения 3 и 4. ОС обычно выбирает значения 1 и 2 для клиента автоматически, когда он делает connect
вызов.
Клиент обычно не привязывается к порту (хотя может). Обычно это позволяет ОС выбрать порт для него. Клиентская ОС выберет номер порта из списка неиспользуемых номеров портов. При вызове connect
на стороне клиента вы указываете значения 3 и 4 (значения, указанные в вызове bind
на стороне сервера). ОС должна автоматически назначить для вас значения клиента 1 и 2.
Думайте об этом, как адрес отправителя и получателя на конверте. Вызов accept
на стороне сервера сообщает адрес отправителя, поскольку, вероятно, сервер уже знает свой собственный адрес. Клиент больше всего интересуется адресом получателя (адресом сервера) и позволяет клерку (ОС) просто вставить адрес возврата,