Android Socket InputStream问题

问题描述

| 我有一个用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可以显示它!问题是“ 2”不应只读取一次,而应该在数据到来时读取。但是它没有,它只读取一次。 即使我只从缓冲区中打印一个字节,它也会卡在Android上。它在台式机上效果很好,但在Android上却卡住了。     

解决方法

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...