Я попытался увеличить размер буфера отправки SocketChannel. Я хочу отправить все байты в моем ByteBuffer только за одну операцию записи. Это мой код:
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);
Метод запуска
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();