我正在使用Java套接字编程来接收服务器响应,正在使用achar 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
。不要只使用平台默认值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句