Я использую Erlang для кодирования клиента bittorrent. Я застрял уже 4 дня по той же проблеме.TCP-порты в Erlang
Я посылаю рукопожатие всем сверстникам с каждым пэром, имеющим свой собственный ip: порт.
Я использую gen_tcp: connect to connect.
Проблема в том, что я не могу получить их ответ. Я провел много исследований и использовал некоторые программы для мониторинга входящих/исходящих подключений.
Одноранговые узлы получают данные и отправляют ответ обратно в порт, который я использовал для отправки им рукопожатия.
Код wise: get_tcp: connect выбирает порт и использует этот порт для отправки данных одноранговому узлу. Друг-ответ отвечает на этот порт. Однако, как вы знаете, в Erlang вам нужно использовать gen_tcp: слушать, чтобы получить ответное соединение, и вам нужно указать порт. В моем случае порт, который я должен прослушивать, это порт, который gen_tcp: connect возвращается.
Я могу получить этот номер порта, используя inet: port, но ошибка всегда одна и та же: используемый порт. Я понимаю, почему я получаю ошибку, просто потому, что порт, который я пытаюсь прослушать, уже используется gen_tcp: connect. Я попытался закрыть Socket, чтобы освободить порт, но ничего.
Итак, мой вопрос: возможно ли в Erlang подключиться к одноранговому узлу и отправить данные на него в порт, а затем прослушать этот же порт для ответа. Если нет, то я должен как-то сообщить партнеру отправить мне данные обратно на порт, который я выбираю.
Любые идеи от всех гуру Erlang приветствуются. Thanks,
// Frank.
BTW Почему все недавно хотят писать bittorrent peers fpr erlang ??? –
Это было задано в университете, Peer! –