繁体   English   中英

通过套接字传输大数据

[英]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()返回零,则您实际上应该使用SelectorOP_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM