Некоторые пояснения и ответ:
- Маршрутизаторы не заботятся или не обрабатывают порты, что является ролью брандмауэра, который выполняет переадресацию портов.Комбинированное устройство маршрутизатора и брандмауэра, которое большинство из нас имеет дома, усугубляет общее недопонимание.
- Можно ли подключить два компьютера без ServerSocket?Нет. Вы можете использовать UDP (протокол связи без сохранения состояния и без установления соединения), но роль ServerSocket заключается в том, чтобы «прослушивать» входящие запросы на соединение и генерировать Socket из этих запросов, что создает канал связи между двумя конечными точками.Сокет имеет и InputStream, и OutputStream, поэтому он может читать как при записи, так и с любого конца.В этот момент (после установления соединения) различие между клиентом / сервером является произвольным, поскольку Socket является объектом двустороннего соединения, который позволяет обеим сторонам отправлять / получать.
- Как насчет прокси?Разве это не позволяет соединения между двумя компьютерами без ServerSocket?Ну, нет, потому что сервер, который выполняет прокси, все еще должен использовать ServerSocket.В зависимости от того, какое приложение вы пытаетесь реализовать, это может быть путь или просто добавление накладных расходов.Даже если «другой сервер где-то еще говорит им подключиться», кто-то должен прослушать запрос на подключение, который является задачей ServerSocket.
- Если соединения происходят через уже открытые порты (наиболее общедоступныесерверы имеют порты <1024, не заблокированные брандмауэрами, но существуют исключения), поэтому вам не нужно менять настройки брандмауэра, чтобы заставить соединение работать. </li>
Итак, повторюсь, ЕДИНСТВЕННАЯ рольServerSocket (что касается вашего вопроса) заключается в прослушивании входящих запросов на соединение и на основании этих запросов создает Socket, который является двусторонним каналом связи между двумя конечными точками.
Для ответаНа вопрос «Как мне создать одноранговое приложение, которое не использует прослушивающие сокеты?», вы этого не делаете.В случае с чем-то вроде Vuze, программное обеспечение действует как клиент и сервер одновременно, отсюда и термин «клиент», а не «клиент» или «сервер».В Vuze каждый клиент - это сервер, а каждый сервер (кроме трекера) - это клиент.