gpt4 book ai didi

java - [Java]来自套接字的 BufferedReader\r\n

转载 作者:行者123 更新时间:2023-12-01 05:11:27 24 4
gpt4 key购买 nike

我正在尝试从 msn 交换机套接字读取文本

public String readStream() {
String temp = null;
try {
temp = buffReader.readLine();
System.out.println("<<< " + temp);
} catch (Exception e) {
e.printStackTrace();
}

return temp;
}
// this method is called
public void print() {
while (socket.isConnected()) {
readStream();
}
}

当在 msn 上收到消息时,输出应该是这样的(也根据 http://www.hypothetic.org/docs/msn/switchboard/example_session.php )

<<< MSG bob@passport.com Bob 143\r\n
MIME-Version: 1.0\r\n
Content-Type: text/plain; charset=UTF-8\r\n
X-MMS-IM-Format: FN=Lucida%20Sans%20Unicode; EF=B; CO=ff0000; CS=0; PF=22\r\n
\r\n
Hello.

我的输出:

<<< MSG myemail@email.com MYNAME 128
<<< MIME-Version: 1.0
<<< Content-Type: text/plain; charset=UTF-8
<<< X-MMS-IM-Format: FN=Arial; EF=; CO=000000; CS=0; PF=00; RL=0;
<<<

如您所见,直到该人发送另一条消息后我才收到发送的消息。

输出:

<<< MSG myemail@email.com MYNAME 128
<<< MIME-Version: 1.0
<<< Content-Type: text/plain; charset=UTF-8
<<< X-MMS-IM-Format: FN=Arial; EF=; CO=000000; CS=0; PF=00; RL=0;
<<<
<<< helloMSG myemail@email.com MYNAME 127
<<< MIME-Version: 1.0
<<< Content-Type: text/plain; charset=UTF-8
<<< X-MMS-IM-Format: FN=Arial; EF=; CO=000000; CS=0; PF=00; RL=0;
<<<

那么如何解决这个问题以便我可以阅读整条消息?

最佳答案

我认为问题在于流在 Hello 之后没有换行符。因此 readLine 不会检测到行尾,直到下一条消息的第一行末尾出现行尾。您需要依靠消息的长度来读取预定义数量的字节才能获取整个消息。查看此网站以获取一些提示:http://www.hypothetic.org/docs/msn/resources/faq.php#howtoparse

编辑:要实现的逻辑引用自上述站点最相关的部分接近尾声:

每当来自服务器的新数据通过套接字到达时,将其附加到将用作“缓存”的字符串。每次接收数据时,也调用缓存解析器函数。

缓存解析器函数将检查缓存变量并查找换行符。

如果没有找到,该函数将返回而不执行任何操作。

如果找到,它将读取从缓存开头到换行符的所有内容,并将其放入新变量中。然后,它将删除从缓存开头到(并包括)换行符的命令。

缓存解析器将查看命令的前三个字节。

如果该命令被识别为常规命令,它将调用该命令的处理程序并循环返回以查看缓存中是否还有更多命令。

这是最相关的部分

如果该命令被识别为有效负载命令,它将查看有效负载的指定长度,并将其与缓存的长度进行比较。

如果整个有效负载都在缓存中,则缓存解析器将取出缓存的开头直至指定长度并将其存储到有效负载变量中。然后,它将调用有效负载函数的适当处理程序,并循环返回以查看缓存中是否有更多命令。

如果缓存的长度小于指定的有效负载长度,则缓存解析器会将命令添加回缓存的开头并返回。

关于java - [Java]来自套接字的 BufferedReader\r\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11988925/

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