2016-03-01 83 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

是的,我知道。这是一些试验来复制示例中的代码。我在另一部分获得了相同的结果。 –