gpt4 book ai didi

Java套接字通信问题

转载 作者:行者123 更新时间:2023-12-01 15:54:08 25 4
gpt4 key购买 nike

我正在使用 Java 进行套接字通信。服务器正在从客户端读取字节,如下所示:

InputStream inputStream;
final int BUFFER_SIZE = 65536;
byte[] buffer = new byte[BUFFER_SIZE];
String msg="";

while (msg.indexOf(0)==-1 && (read = inputStream.read(buffer)) != -1)
{
msg += new String(buffer, 0, read);
}
handleMessage(msg)

当客户端一次发送多条消息时,服务器会混合消息,例如

MSG1: <MyMessage><Hello/>nul
MSG2: </MyMessage><MyMessage><Hello again /></MyMessage>nul

因此消息 1 的尾部是消息 2 的一部分。null代表java nul符号。

为什么输入流会混合消息?

提前致谢!

最佳答案

您进行了错误的比较。您检查字符串中的任何位置是否有\0,然后相信它是一条消息。错误的。事实上,在第二个示例中,\0 出现了两次。

你应该采取不同的做法。从 Stream 中逐个字符读取(使用包装 BufferedInputStream,否则性能会很糟糕),并在到达\0 时跳过。现在消息已完成,您可以处理它。

InputStream bin = new BufferedInputStream(inputStream);
InputStreamReader reader = new InputStreamReader(bin);
StringBuilder msgBuilder = new StringBuilder();
char c;
while ( (c=reader.read()) != -1 )
{
msgBuilder .append(c);
}
handleMessage(msgBuilder.toString())

更好的是使用换行符进行行分隔。在这种情况下,您可以只使用 BufferedReader 的 readline() 功能。

关于Java套接字通信问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5417603/

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