Для моего курса нам нужно построить битторрент-клиент на Java.Мне трудно осмыслить, как обрабатываются связи.Я собираюсь пойти шаг за шагом и указать на ту часть, которая беспокоит меня.Если я сделаю неправильное утверждение, пожалуйста, исправьте меня, но по большей части я понимаю протокол, это больше связано с подключениями от входящих одноранговых узлов и работой с портами и сокетами.
Поэтому, когда вы соединяетесь с трекером,вы указываете ему порт, который вы будете прослушивать, для пиров, желающих соединиться с вами.
Словарь пиров, который вы получаете от трекера, включает все те порты пиров, которые они прослушивают.Чтобы соединиться с этими одноранговыми узлами, вы просто создаете сокет на случайном порте и затем передаете рукопожатие.
Теперь мой вопрос заключается в том, являетесь ли вы узлом на другой стороне.То есть, если вы прослушиваете порт, который вы дали трекеру, и одноранговый узел посылает вам рукопожатие на этом порту, как вы общаетесь с одноранговым узлом, который вы хотите, чтобы он передавал на другой порт.
Я очень запутался с портами и сокетами, пытаясь выяснить, как справляться с загрузкой с нескольких узлов и загрузкой, но вот некоторые предположения, которые я сделал:
- Для каждого узла, с которым вы соединяетесь, используйте новый порт / сокет, который вы загружаете (если они являются активным узлом) / загружаются с помощью.
- Порт, данный трекеру, используется только для прослушиваниявходящие одноранговые узлы.
Я думаю, что, возможно, мое понимание портов и сокетов может быть ошибочным, что мешает мне понять проблему.Надеюсь, я тоже правильно сформулировал это.Спасибо.