Как мне разработать одноранговое приложение, которое не использует прослушивающие сокеты? - PullRequest
3 голосов
/ 14 сентября 2011

Я заметил, что если вы хотите написать приложение, которое использует прослушивающие сокеты, вам нужно создать правила переадресации портов на вашем маршрутизаторе. Если я хочу соединить два компьютера без какого-либо одного из компьютеров, связанного с настройками маршрутизатора, есть ли способ, которым я могу заставить двух клиентов соединяться друг с другом без использования любого из них с помощью прослушивающих сокетов? В другом месте должен был бы быть другой сервер, сообщающий им о необходимости подключения, но возможно ли это?

Ответы [ 3 ]

4 голосов
/ 14 сентября 2011

Некоторые пояснения и ответ:

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

Итак, повторюсь, ЕДИНСТВЕННАЯ рольServerSocket (что касается вашего вопроса) заключается в прослушивании входящих запросов на соединение и на основании этих запросов создает Socket, который является двусторонним каналом связи между двумя конечными точками.

Для ответаНа вопрос «Как мне создать одноранговое приложение, которое не использует прослушивающие сокеты?», вы этого не делаете.В случае с чем-то вроде Vuze, программное обеспечение действует как клиент и сервер одновременно, отсюда и термин «клиент», а не «клиент» или «сервер».В Vuze каждый клиент - это сервер, а каждый сервер (кроме трекера) - это клиент.

2 голосов
/ 14 сентября 2011

Если вам нужно TCP-соединение между двумя компьютерами, и оба они находятся за маршрутизаторами (и вы не хотите настраивать переадресацию портов), я думаю, что единственная другая возможность, которую вы имеете, это иметь третий сервер где-то, который не ' • за брандмауэром, на котором запущен ServerSocket и который принимает соединения между двумя другими компьютерами и обеспечивает прокси-соединение между двумя. Невозможно установить TCP-соединение между двумя без одного прослушивающего сокета и другого, подключенного к нему.

0 голосов
/ 14 сентября 2011

В: Если я хочу соединить два компьютера без одного из компьютеров, связывающихся с настройками маршрутизатора, есть ли способ заставить двух клиентов соединиться друг с другом

Да: сервер прослушивает открытый порт:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...