У меня есть несколько конкретных вопросов, связанных с тем, как работают socketchannel и socketserverchannel:
Когда ServerSocketChannel принимает соединение (см. код ниже), насколько я понимаю, он каким-то образом перемещает клиента на новый случайно выбранный порт. Это правильно? Есть ли способ выбрать этот порт из диапазона? Я спрашиваю, потому что, когда я пишу и развертываю такой сервер на виртуальной машине, я хочу иметь возможность внести в белый список только набор портов. Если любой случайный порт может быть выбран вызовом accept(), как я могу этого добиться? Разве я не должен открывать все порты?
Сокет ServerSocketChannel = ServerSocketChannel.open();
socket.bind(новый InetSocketAddress(localhost, 1111));
... ..
SocketChannel acceptSocket= socket.accept();
Код клиента довольно прост (см. код ниже).
Клиент SocketChannel = SocketChannel.open (новый InetSocketAddress (localhost, 1111)); .....//инициализировать буфер
клиент.запись(буфер);
Теперь этот клиент пытается подключиться к порту 1111. Как клиент определяет, на какой порт он был перенаправлен? Как он узнает, что операция записи должна выполняться на другом порту, выбранном сервером?