Создание ServerSocket - это то, что открывает порт на стороне сервера (при условии, что порт также не заблокирован на брандмауэре). Во многих системах номера портов <1024 не блокируются брандмауэром, и поэтому часто не требуют специальной настройки. Однако, поскольку многие интернет-провайдеры все более и более жестко обращаются с тем, какие порты они блокируют в своей сети, многие части программного обеспечения перешли на работу через порт 80. Почему порт 80? Это порт, используемый для HTTP, и, следовательно, в значительной степени открытый (на брандмауэрах) 100% времени для любой службы, работающей в сети. </p>
Чтобы ответить на вопрос, как найти открытый порт, сканеры портов выполняют эту функцию. По сути, все, что они делают, это пытаются установить соединение на нескольких портах (скажем, порт 1-1024). Когда соединение установлено успешно (в Java вы увидите это как хорошее соединение через сокет), вы можете считать этот порт «открытым». Вам не нужно обмениваться никакими данными, чтобы установить соединение, вам просто нужно установить соединение и затем закрыть его.
Кроме того, если на сервере не запущено какое-либо серверное программное обеспечение, оно не будет отображаться «открытым», даже если оно не заблокировано. Без успешного подключения через сокет (TCP) вы не узнаете, какие порты не заблокированы брандмауэром пользователя.
Повторюсь, я переключаюсь между двумя взаимосвязанными, но отдельными понятиями. Межсетевые экраны могут блокировать / открывать порты или иметь переадресацию портов. Это не то же самое, что порт, «открытый» для соединений на данном компьютере. Чтобы машина могла принимать соединения через данный порт, должна быть программа, прослушивающая соединение через этот порт, иначе соединение не может быть установлено.