2011-05-29 70 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),并且只显示接收到的数据的第一个字节并将其余部分丢弃。