[英]Transferring big data over Socket
我目前尝试通过套接字连接发送一个大消息。 我的消息大约有1.3 MB。 这是我的代码:
public void send(String message) throws IOException {
byte[] bytes = message.getBytes(encoding);
ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
while (socketChannel.write(byteBuffer) > 0) {
}
}
客户端的另一端是一个服务器,它仅打印出读取的数据。 大约260 kB后,它始终会停止读取。 在我看来有些缓冲区已满? 我该怎么做才能使此套接字连接正常工作?
while (socketChannel.write(byteBuffer) > 0) {
}
如果您未处于阻止模式,则该循环将在本地套接字发送缓冲区填满后终止,这将导致write()
返回零。
一个简单但质量较差的解决方案是将循环条件从>
更改为>=
。 但是,如果write()
返回零,则您实际上应该使用Selector
和OP_WRITE
来检测通道何时再次可写。
我认为最好为ByteBuffer分配足够的空间并在发送之前翻转它,因为从现在开始您想从中读取内容。 也许这对你有用。
final byte[] bytesToSend = message.getBytes(encoding);
ByteBuffer buffer = ByteBuffer.allocate(bytesToSend.length);
buffer.clear();
buffer.put(bytesToSend);
buffer.flip();
while (buffer.hasRemaining()) {
try {
socketChannel.write(buf);
} catch (IOException e) {
e.printStackTrace();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.