Java-проект BitTorrent - входящие соединения - PullRequest
1 голос
/ 29 марта 2012

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

Поэтому, когда вы соединяетесь с трекером,вы указываете ему порт, который вы будете прослушивать, для пиров, желающих соединиться с вами.

Словарь пиров, который вы получаете от трекера, включает все те порты пиров, которые они прослушивают.Чтобы соединиться с этими одноранговыми узлами, вы просто создаете сокет на случайном порте и затем передаете рукопожатие.

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

Я очень запутался с портами и сокетами, пытаясь выяснить, как справляться с загрузкой с нескольких узлов и загрузкой, но вот некоторые предположения, которые я сделал:

  1. Для каждого узла, с которым вы соединяетесь, используйте новый порт / сокет, который вы загружаете (если они являются активным узлом) / загружаются с помощью.
  2. Порт, данный трекеру, используется только для прослушиваниявходящие одноранговые узлы.

Я думаю, что, возможно, мое понимание портов и сокетов может быть ошибочным, что мешает мне понять проблему.Надеюсь, я тоже правильно сформулировал это.Спасибо.

1 Ответ

1 голос
/ 29 марта 2012

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

...