gpt4 book ai didi

java - 无法接收服务器完整响应

转载 作者:行者123 更新时间:2023-11-30 03:50:45 26 4
gpt4 key购买 nike

我使用Java套接字编程来接收服务器响应,我使用char数组并使用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-不存在任何类型的终止符可能导致该行为。

最佳答案

The problem is some times I can't receive the full response from the server and instead of that I receive like half of it and then the response after that I receive the other half.

是的。这就是流协议(protocol)的工作原理。您不应该假设您将在一次调用 read() 中收到所有数据。

如果同一个流上有多条消息,则需要一种方法来告诉消息在哪里结束。您不得依赖read()读取整条消息,但不读取任何下一条消息。

三种常见的方法是:

  • 每条消息的长度前缀
  • 消息之间的分隔符
  • 自终止消息(例如 XML,您可以通过到达文档的结束标记来判断文档的结尾)

如果您没有任何这些方案,但您想将多条消息放在网络上并单独处理它们,那么您的协议(protocol)从根本上已被破坏,您应该重新访问它。

此外,您应该在构造 InputStreamReader 时指定要应用的编码。不要只使用平台默认值。

关于java - 无法接收服务器完整响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24510062/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com