Как я могу быть уверен, что этот порт всегда свободен?
Вы можете использовать "netstat", чтобы проверить, доступен порт или нет.
Вы можете перечислить все порты, используемые службой через:
netstat -anp
Если вы хотите найти определенный порт, вы можете использовать:
netstat -anp | find "port number"
, например netstat -anp | find ":8080"
.
Имеет ли значение, если другая программа также прослушивает этот порт?
Исходя из традиционного подхода, да, для TCP вы можете одновременно иметь только одно приложение, прослушивающее один и тот же порт и один и тот же локальный IP-адрес. Вы можете использовать один и тот же порт, используя несколько локальных IP-адресов, используя несколько сетевых карт или виртуальные сетевые интерфейсы.
Однако, похоже, что при использовании опции сокета SO_REUSEPORT
вы можете использовать его повторно, проверьте this для получения дополнительной информации.
Если порт должен быть свободен, а порт по умолчанию занят, как бы я уведомил клиентов об изменении номера порта? Должен ли я просто сделать так, чтобы сервер продолжал пытаться подключиться к новому порту, увеличивая номер порта, пока не найдет свободный порт?
Лично я бы выбрал порт, который всегда свободен, или небольшой список портов, которые, как я знал, будут обычно свободными, и попробовал бы один за другим.
Общие правила выбора порта включают выбор как минимум 4-значного числа и избегание значений, меньших 1024.
Кроме того, даже если порт уже используется другой службой, вы можете переназначить его для прослушивания другого порта, его вашей сети.