2013-05-29 2 views
0

Я пытаюсь использовать библиотеку ttorrent для создания торрент-приложения для Android. У меня проблема.ttorrent library HttpResponseMessage error

05-29 23: 07: 23,388: Е/AndroidRuntime (3681): неустранимые: BT-анонс (.. 393337)

05-29 23: 07: 23,388: Е/AndroidRuntime (3681): java.lang.NullPointerException

05-29 23: 07: 23,388: Е/AndroidRuntime (3681): в com.turn.ttorrent.common.protocol.http.HTTPAnnounceResponseMessage.parse (HTTPAnnounceResponseMessage.java:105)

05-29 23: 07: 23.388: E/AndroidRuntime (3681): at com.turn.ttorrent.common.protocol.http.HTTPTrackerMessage.parse (HTTPTrackerMessage.java:51)

05-29 23: 07: 23,388: Е/AndroidRuntime (3681): в com.turn.ttorrent.client.announce.HTTPTrackerClient.announce (HTTPTrackerClient.java:124)

05-29 23: 07: 23.388: E/AndroidRuntime (3681): at com.turn.ttorrent.client.announce.Announce.run (анонс.java:224)

05-29 23: 07: 23.388: E/AndroidRuntime (3681)): в java.lang.Thread.run (Thread.java:856)

public static HTTPAnnounceResponseMessage parse(ByteBuffer data) 
    throws IOException, MessageValidationException { 
    BEValue decoded = BDecoder.bdecode(data); 
    if (decoded == null) { 
     throw new MessageValidationException(
      "Could not decode tracker message (not B-encoded?)!"); 
    } 

    Map<String, BEValue> params = decoded.getMap(); 

    try { 
     List<Peer> peers; 

     try { 
      // First attempt to decode a compact response, since we asked 
      // for it. 
      peers = toPeerList(params.get("peers").getBytes()); 
     } catch (InvalidBEncodingException ibee) { 
      // Fall back to peer list, non-compact response, in case the 
      // tracker did not support compact responses. 
      peers = toPeerList(params.get("peers").getList()); 
     } 

     return new HTTPAnnounceResponseMessage(data, 
      params.get("interval").getInt(), 
      params.get("complete").getInt(), 
      params.get("incomplete").getInt(), 
      peers); 
    } catch (InvalidBEncodingException ibee) { 
     throw new MessageValidationException("Invalid response " + 
      "from tracker!", ibee); 
    } catch (UnknownHostException uhe) { 
     throw new MessageValidationException("Invalid peer " + 
      "in tracker response!", uhe); 
    } 

Существует нет клавиши, такие «ПЕРИОД al "или" complete "или" indomplete "являются параметрами. Существует два ключа: «сверстники» и «минимальный интервал».

Насколько я понял. После того, как я вызвал метод Client download, он запросил некоторую информацию из трекера, а затем попытался разобрать эту информацию. И вот где ошибка.

Итак, вопрос в том, почему это так? Это ошибка в библиотеке или что-то не так?

ответ

1

В чем вопрос?

Пожалуйста, отредактируйте ваш вопрос и добавьте больше деталей.

В идеале укажите sscce.

Добавьте к вашему вопросу ссылку на торрент-файл, который показывает эту ошибку. Как вы строите ttorrent?

Убедитесь, что ошибка, которую вы видите, возникает при запуске с Android и не происходит в простой Java.

Вы можете использовать git, чтобы получить код ttorrent из github или нажать кнопку в проекте github, чтобы загрузить zip.

ttorrent использует maven. Если вы извлекаете зависимости вручную, вы не можете получить правильные версии. Вы должны импортировать код в Eclipse в качестве проекта maven. Eclipse -> Файл -> ... Импорт -> Maven -> Существующий проект Maven

В панели навигатора. Найдите проект ttorrent и щелкните правой кнопкой мыши, выберите Run As -> Maven Build ... Для типа цели в «пакете» и нажмите «Запустить».

Я начал с примера клиента ttorrent и добавил путь к известному хорошему Ubuntu 13.04 torrent file, а также к каталогу для сохранения.

Я запустил код в отладчике, и ttorrent функционировал правильно. Он начал загрузку Ubuntu без исключения исключений или сообщений об ошибках печати.

В приведенной вами строке я вижу, что карта params имеет четыре записи («интервал», «полный», «сверстники», «неполный»).

Вот код клиента я использовал:

public class ClientTest 
{ 

    public static void main(String[] args) throws NoSuchAlgorithmException 
    {  
     try { 
      SharedTorrent fromFile = 
      SharedTorrent.fromFile(
      new File("j:/ubuntu-13.04-desktop-amd64.iso.torrent"), 
      new File("j:/td")); 
      Client client = 
       new Client(InetAddress.getLocalHost(), fromFile); 
      client.download(); 
      client.waitForCompletion(); 
     } catch (UnknownHostException ex) { 
      Logger.getLogger(ClientTest.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (IOException ex) { 
      Logger.getLogger(ClientTest.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

} 
+0

Ну, как именно вы «начали с ttorrent примера». Поскольку после загрузки файлов я создал новый проект в Eclipse. Затем я скопировал все файлы в каталог src. Затем загрузите все банки, такие как простая структура, commons.io и так далее. И я вижу ошибку в классе TrackerService. response.setText ("Not Found"); дает ошибку. У ответа просто нет такого метода вообще. – user1685095

Смежные вопросы