2015-03-13 89 views
0

我有一個簡單的客戶端,我正在測試從我的android設備,我正在測試一個telnet服務器調用telehack.com。問題是當我從菜單項列表中請求某個選項時,數據發送但沒有收到。 選項是advent(巨大的冒險)。我嘗試了各種實現(套接字,套接字通道和選擇),並在發送到來後仍然遇到同樣的問題,沒有收到數據,菜單中的其他選項正常工作。更糟糕的是,我已經從playstore下載了各種telnet客戶端,他們似乎有同樣的問題。 (除了似乎使用C++ NDK套接字庫的Mobile Telnet)。android插座沒有收到

同時在Windows上查看和Wireshare和telnet客戶端顯示數據被髮送回來沒有什麼不尋常的。

public void run() { 
    mRun = true; 

    try { 
     Socket sc = new Socket(SERVER_IP, SERVER_PORT); 
     inBuffer = new DataInputStream(sc.getInputStream()); 
     outBuffer = new DataOutputStream(sc.getOutputStream()); 

     Log.e("TCP Client", "C: Connecting..."); 

     if (mConnectionListener != null) 
      mConnectionListener.connectionStatusChanged(true); 

     sc.setSoTimeout(5*60*1000);     //Socket timeout = 4 minutes 

     sc.setTcpNoDelay(true); 
     sc.setKeepAlive(true); 

     try { 


      while (mRun) { 


       int size = inBuffer.available(); 
       if (size > 0) 
       { 


        byte[] readBuf = new byte[size]; 
        inBuffer.read(readBuf); 
+0

你可能會多一點具體的關於你的問題,包括你所談論的範圍內的全部源代碼(看起來像它的不完整)。 – gabriel 2015-03-13 12:19:59

+0

您可以嘗試在Android模擬器上運行此操作,並通過主機上的數據包嗅探,或者通過可以嗅探的wifi路由器上的設備,或者通過您的開發機器的以太網連接的WiFi共享來嗅探。 – 2015-03-13 12:20:38

回答

0

available()方法可能會得到您想要的結果,但它不一定非要。一些流只是返回0。使用恆定的大小讀緩衝區,而不是:

byte[] buffer = new byte[4096]; 

int bytesRead = 0; 
while ((bytesRead = in.read(buffer)) >= 0){ 
    // note that only the bytes 0 to bytesRead-1 are valid in buffer 
}