我试着增加SocketChannel的发送缓冲区大小。我只想在一次写入操作中发送ByteBuffer中的所有字节。这是我的代码:如何增加SocketChannel的发送缓冲区大小?
channel = SocketChannel.open(address);
ByteBuffer buf = ByteBuffer.wrap(channelBytes);
channel.socket().setSendBufferSize(buf.remaining());
channel.write(buf);
即使我调用该方法setSendBufferSize,插座不发送超过131071个字节。 我该怎么办?
接收器是这样的:
构造
uplink = ServerSocketChannel.open();
uplink.socket().bind(new InetSocketAddress(UPLINK_PORT));
uplink.socket().setReceiveBufferSize(2*1024*1024);
Run方法
SocketChannel clientChannelUp = uplink.accept();
clientChannelUp.socket().setReceiveBufferSize(2*1024*1024);
clientChannelUp.socket().setSendBufferSize(2*1024*1024);
buffer = ByteBuffer.allocate(Short.MAX_VALUE*100);
clientChannelUp.read(buffer);
buffer.flip();
随着读写循环我的代码是这样的:
发射
while(buf.hasRemaining()) {
channel.write(buf);
}
接收机
int r = clientChannelUp.read(buffer);
while(r==131071) {
r=clientChannelUp.read(buffer);
}
buffer.flip();
该如何实际工作中依赖于操作系统的。您可以调用getSendBufferSize来查看缓冲区的实际大小。 – 2015-01-20 22:22:27
如果我调用getSendBufferSize而不先设置它,结果是8192.但是通道发送131071个字节。我很困惑 – 2015-01-20 22:26:35
你怎么知道?使用该代码,您无法分辨发送的数量。 – EJP 2015-01-20 23:00:51