Tengo dos bibliotecas java. Uno se conecta a DHT y puede descargar archivos torrent con éxito. Y el otro que descarga los datos reales asociados con el torrente.
La biblioteca del cliente de torrent espera una sección de anuncio o lista de anuncios en el torrent y no entiende la entrada de 'nodos'.
La pregunta es cómo modifico el código del cliente de torrent para comprender la sección de 'nodos' de un archivo de torrent. O ¿Cómo calculo una URL de seguimiento a partir de un conjunto de direcciones IP:port DHT de pares?
Podría simplemente adivinar la url adivinando un número de puerto y agregando /anunciar en él ... pero esto seguramente no es correcto.
¿Alguien sabe cómo funciona esto?
Para la operación de solo DHT, no necesita una URL de anuncio. Si la propia biblioteca espera uno, puede insertar una URL ficticia, el formato dht://<infohash in hex> es común, pero no importa, ya que no se utilizará.
La parte DHT, por otro lado, no requiere que los nodes realicen una búsqueda, simplemente funciona en función del infohash del torrente. Los nodos se pueden inyectar opcionalmente en un cliente dht para el arranque, por ejemplo, ejecutando un ping en ellos, pero eso no debería ser necesario si ya se arrancó. Una vez que el cliente DHT haya realizado sus get_peers y announce las búsquedas, las listas de pares se pueden volver a inyectar en el cliente torrent.
Ya que está usando mi biblioteca: puede usar PeerLookupTask para leer una lista de pares de torrent desde DHT y AnnounceTask para agregar su puerto de torrent a la lista. La IP y los puertos obtenidos deben pasarse al cliente de torrent. El comando GetPeers CLI contiene un ejemplo de cómo usar la primera parte. También hay métodos de utilidad que deberían cubrir casos de uso común.
Como alternativa, puedo recomendarle ver Bt, que es un cliente Java 8 BitTorrent y ya se integra con el mldht de 8472: https://github.com/atomashpolskiy/bt