Когда вы устанавливаете TCP-соединение, 4-кортеж (source-ip, source-port, dest-ip, dest-port) должен быть уникальным - это гарантирует, что пакеты будут доставлены в нужное место.
Существует еще одно ограничение на стороне server , что только одна серверная программа может связываться с номером входящего порта (при условии, что один IP-адрес; у серверов с несколькими сетевыми картами есть другие полномочия, но нам не нужно обсудить их здесь).
Итак, на стороне сервера вы:
- создать сокет.
- привязать этот сокет к порту.
- прослушивать этот порт.
- принимать соединения через этот порт.
и может быть несколько подключений (по одному на клиента).
На стороне клиента обычно немного проще:
- создать сокет.
- открыть соединение.
Когда клиент открывает соединение, он указывает IP-адрес и порт сервера . Он может указать свой порт источника, но обычно использует ноль, в результате чего система автоматически назначает ему свободный порт.
Существует нет требования о том, что IP-адрес / порт назначения должен быть уникальным, поскольку это может привести к тому, что только один человек сможет одновременно использовать Google, и это вполне может разрушить их бизнес-модель.
Это означает, что вы даже можете делать такие удивительные вещи, как мультисессионный FTP, поскольку вы настраиваете несколько сеансов, в которых единственным отличием является ваш порт источника, позволяющий загружать порции параллельно. Торренты немного отличаются тем, что назначение каждого сеанса обычно отличается.
И, после всех этих колебаний (извините), ответ на ваш конкретный вопрос заключается в том, что вам не нужно указывать свободный порт. Если вы подключаетесь к серверу с помощью вызова, который не указывает ваш исходный порт, он почти наверняка будет использовать ноль под крышками, и система выдаст вам неиспользуемый.