У меня есть ServerSocketChannel, и как только этот канал принимает соединение, я хочу «передать» или «передать» его SocketChannel. Я попытался, как только я принял соединение, просто сделать socketchannel.bind(ServerSocketChannel.socket.getLocalSocketAddress)
, но я получил исключение, которое говорит: «Адрес уже используется». Это имеет смысл, поэтому я попытался сохранить адрес сокета в переменной, закрыть ServerSocketChannel, а затем попытаться связать его с переменной, но он по-прежнему жалуется на то, что уже используется.
//Accept the connection
ServerSocketChannel.accept();
//Save the address and close the connection
address = ServerSocketChannel.socket().getLocalSocketAddress();
ServerSocketChannel.close();
//Bind the address to another channel
SocketChannel.bind(address);//Here is where I get the exception
Этокак выглядит мое решение сейчас (кроме имен переменных, но вы поняли). Причина, по которой я не могу просто принять его с этим каналом, заключается в том, что он используется для другой цели после того, как это соединение установлено, поэтому мне нужно открыть выделенный ServerSocketChannel только для приема соединений, которые затем передаются в SocketChannel.