Я пытаюсь перенаправить соединение на другой сервер с nio, Вот мой код, я думаю, что проблема заключается в ByteBuffer.rewind(), потому что этот код перенаправляет данные, но странным образом ,Java NIO Перенаправление связи
public static void main(String[] args) throws Exception {
ServerSocketChannel proxyServer = ServerSocketChannel.open();
while (!Thread.interrupted()) {
SocketChannel clientChannel = proxyServer.accept();
clientChannel.configureBlocking(false);
ByteBuffer uploadBuffer = ByteBuffer.allocate(1024 * 1024 * 5);
ByteBuffer downloadBuffer = ByteBuffer.allocate(1024 * 1024 * 5);
try {
SocketChannel serverChannel = SocketChannel.open();
serverChannel.connect(
new InetSocketAddress(
"another server"
, 80
)
);
while (!Thread.interrupted()) {
// Client -> Server
if (clientChannel.read(uploadBuffer) < 0) {
throw new EOFException();
}
uploadBuffer.rewind(); // <- maybe is this the error
while (uploadBuffer.hasRemaining()) {
serverChannel.write(uploadBuffer);
}
// Server -> Client
if (serverChannel.read(downloadBuffer) < 0) {
throw new EOFException();
}
downloadBuffer.rewind(); // <- maybe is this?
while (downloadBuffer.hasRemaining()) {
clientChannel.write(downloadBuffer);
}
// Buffer reset
downloadBuffer.clear();
uploadBuffer.clear();
}
} catch (Exception exception) {
clientChannel.close();
}
}
proxyServer.close();
}
Возможно, мне нужно использовать флип?
Что вы имеете в виду * этот код перенаправляет данные, но странным образом. *. Пожалуйста, будьте более конкретными! –
@suman Я имею в виду, что загруженный/загруженный байт-буфер имеет некоторые проблемы, поскольку они не находятся в том же порядке, когда отправлены или возвращены – Emax