Android Socket InputStream问题

时间:2011-05-29 08:49:26

标签: java android

我有一个用VB编写的服务器,它会在3秒内向客户端发送数据。我写了一个像这样的客户端Java代码:

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上。

1 个答案:

答案 0 :(得分:0)

这是一段奇怪的代码。您不检查read()的返回值是否为-1,即EOS,并且您只显示收到的数据的第一个字节并将其余部分丢弃。