2016-03-01 2 views
-1

Я пытаюсь использовать библиотеку Aapche Commons Net для реализации telnet-соединения в Android. Я использовал пример для построения AsyncTask, но, похоже, никаких данных не получено.TelnetClient не получает данных

Это doInBackground моего AsyncTask:

protected Long doInBackground(String... strings) { 
    publishProgress("Connecting to "+target+"\n"); 

    try { 
     Thread reader = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       InputStream in = tc.getInputStream(); 
       byte[] buff = new byte[1024]; 
       int r = 0; 
       try { 
        do { 
         r = in.read(buff); 
         if (r > 0) { 
          publishProgress("[R] " + new String(buff, 0, r)); 
         } 
        } while (r >= 0); 
       } catch (Exception e) { 
        publishProgress(e.getClass()+": "+e.getMessage()); 
       } finally { 
        publishProgress("\n ++++ Disconnecting from thread.\n"); 
        try { 
         tc.disconnect(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     }); 

     tc = new TelnetClient(); 
     TerminalTypeOptionHandler ttopt = new TerminalTypeOptionHandler("VT100", false, false, true, false); 
     EchoOptionHandler echoopt = new EchoOptionHandler(true, false, true, false); 
     SuppressGAOptionHandler gaopt = new SuppressGAOptionHandler(true, true, true, true); 
     try 
     { 
      tc.addOptionHandler(ttopt); 
      tc.addOptionHandler(echoopt); 
      tc.addOptionHandler(gaopt); 
     } 
     catch (InvalidTelnetOptionException e) 
     { 
      System.err.println("Error registering option handlers: " + e.getMessage()); 
     } 

     tc.connect(target, port); 
     tc.registerNotifHandler(act); 

     reader.start(); 

     reader.join(); 
    } catch (Exception e) { 
     publishProgress(e.getClass()+" "+e.getMessage()); 
    } finally { 
     publishProgress("+++ End of AsyncTask"); 
    } 

    return 0L; 
} 

Я думаю, что я скопировал весь код из примера, до сих пор я только получаю:

Connecting to 192.168.3.101 
negcode=1, optcode=24 (this is from the notifhandler) 
+++ Disconnecting from thread 
+++ End of AsyncTask 

Когда я запускаю пример кода на мой ноутбук, он работает, я получаю login от telnet, как ожидалось.

Обновление Это действительно работает, если я жду 1500 мс после tc.connect(). Но это довольно уродливый хак.

ответ

0

Не помещайте нити в doInBackground из AsyncTask. Просто поместите в него код.

+0

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

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