2011-05-29 119 views
1

我有一臺用VB編寫的服務器,它在3秒內向客戶端發送數據。我寫了一個客戶端的Java代碼:Android Socket InputStream問題

class Commu extends Thread { 
    Socket socket; 
    InputStream inputStream; 
    OutputStream outputStream; 

    public Commu() { 
     try { 
     socket=new Socket(); 
     socket.connect(new InetSocketAddress("192.168.0.1", 1234))); 

     inputStream=socket.getInputStream(); 
     outputStream=socket.getOutputStream(); 
     this.start(); 
     } catch(Exception e) { 
     System.out.println(e); 
     } 
    } 

    public void run() { 
     while(true) { 
     byte[] buffer=new byte[1024]; 
     inputStream.read(buffer); 
     System.out.println(buffer[0]); 
     } 
    } 
} 

它工作正常,我的桌面上,每當VB服務器發送消息時,它打印消息。

它適用於Android,但inputStream只讀一次,然後卡住;如果我想要讀取更多數據,我必須使用outputStream發送一些數據,然後inputStream將只讀一次,並再次卡住。這真的很奇怪,誰能告訴我爲什麼?

System.out.print()沒有問題,因爲DDMS可以顯示它,我保證!問題是inputStream不應該只讀一次,它應該在數據到來時讀取。但它沒有,只讀過一次。

即使我只從緩衝區打印一個字節,它也會卡在Android上。它在桌面上運行得非常好,但在Android上卡住了。

+0

我想你刪除了有趣的事情(在while循環中)。另外,使用Log.d()而不是system.out.println ... – MByD 2011-05-29 09:01:04

回答

0

這是一段奇怪的代碼。您不檢查read()的返回值-1(即EOS),並且只顯示接收到的數據的第一個字節並將其餘部分丟棄。