我有一个用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上。
答案 0 :(得分:0)
这是一段奇怪的代码。您不检查read()的返回值是否为-1,即EOS,并且您只显示收到的数据的第一个字节并将其余部分丢弃。