gpt4 book ai didi

java - 如何在 Java 中使用 SocketChannel 发送然后读取\n

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:25 24 4
gpt4 key购买 nike

我正在为客户端/服务器应用程序使用 SocketChannel Java 类。我可以发送和检索数据。但是如果我的数据包含 '\n' 那么我就没有读取到正确的数据。例如

sending data = "Hi dear"
receiving data = "Hi dear"

sending data = "Hi dear\n\n i am fine"
receiving data = "Hi dear"

sending data = "Hi dear\\n\\n i am fine"
receiving data = "Hi dear\n\n i am fine"


ByteBuffer byteBuffer = ByteBuffer.allocate(BUFSIZE);
int nbytes = socketChannel.getChannel().read(byteBuffer);

我正在使用 US-ASCII 解码。我该如何克服此类问题?

谢谢,迪帕克

最佳答案

读取操作不保证读取所有可用数据,如果 SocketChannel 处于非阻塞模式,也不保证读取任何数据。在上述情况下,您可能需要多次调用才能读取所有传输的数据。

您需要某种方式让接收代码知道它何时读取了所有数据。这意味着要么让发送方发送有关数据内容的信息(长度等)作为商定协议(protocol)的一部分,要么将 Channel 仅用于一个数据 block 并读取 Channel 直到它关闭。

关于java - 如何在 Java 中使用 SocketChannel 发送然后读取\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/876236/

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