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