![](/img/trans.png)
[英]Control Socket InputStream and OutputStream from Fragment (Android)
[英]Android Socket InputStream problem
我有一個用 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 上。
這是一段奇怪的代碼。 您不檢查 read() 的返回值是否為 -1,即 EOS,並且您只顯示接收到的數據的第一個字節並將 rest 扔掉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.