问题描述
|
我有一个用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),并且仅显示接收到的数据的第一个字节,而将其余部分丢弃。