Как вы передаете сокет-соединение от одного сокет-канала к другому? - PullRequest
0 голосов
/ 17 октября 2019

У меня есть 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.

1 Ответ

0 голосов
/ 18 октября 2019

Я только что решил свою проблему. Я упустил что-то простое и попробовал более длинный путь. SocketChannel = ServerSocketChannel.accept(); Это то, что я искал все время.

...