作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在为客户端/服务器应用程序使用 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/
我是一名优秀的程序员,十分优秀!