2016-03-01 42 views
-1

我試圖使用Aapche共享網庫來實現在Android的telnet連接。我使用的示例建立一個AsyncTask,但似乎沒有收到任何數據都沒有。TelnetClient沒有接收到數據

這是對doInBackgroundAsyncTask

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 

當我運行示例代碼我筆記本電腦,它的工作原理,我從Telnet得到login預期。

更新如果我在tc.connect()後等待1500毫秒,它確實有效。但這是一個非常醜陋的黑客。

回答

0

不要把線程在的AsyncTask的doInBackground。只需將代碼放入其中即可。

+0

是的,我知道。這是一些試驗來複制示例中的代碼。我在另一部分獲得了相同的結果。 –