[英]can't receive server full response
我正在使用Java套接字編程來接收服務器響應,正在使用char array
並使用read()
方法讀取其中的每個響應:
InputStream stream = null;
try{
stream = socket.getInputStream();
}catch(Exception e){
conn_lost();
}
if(stream != null){
input = new BufferedReader(new InputStreamReader(
stream));
Looper.prepare();
char a[] = new char[1000];
for(int i =0; i < a.length; i++){
a[i] = ' ';
}
while (true){
input.read(a);
String response = String.valueOf(a);
process_server_response(response);
for(int i =0; i < a.length; i++){
a[i] = ' ';
}
}
問題是有時我無法從服務器收到完整的響應,而是收到一半的響應,然后收到另一半的響應。
值得一提:
1-受影響的響應比其他響應大一點,但我確定它不會超過1000窩。
2-我很確定服務器端可以正常工作,並且可以發送完整的響應。
3-不存在任何可能導致該行為的終止符 。
問題是有時我無法從服務器收到完整的響應,而是收到一半的響應,然后收到另一半的響應。
是。 這就是流協議的工作方式。 您不應該假設您將在一次read()
調用中收到所有數據。
如果在同一流上有多個消息,則需要一種方法來告知消息結束的位置。 您一定不能依靠read()
讀取一條消息的全部,而不要讀取任何下一條消息。
三種常見方法是:
如果您沒有這些方案,但是您想將多條消息放在網絡上並分別進行處理,則您的協議從根本上被破壞了,應該重新訪問它。
此外,在構造InputStreamReader
時,應指定要應用的編碼。 不要只使用平台默認值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.