我有一些与 socketchannel 和 socketserverchannel 如何工作有关的具体问题:-
当 ServerSocketChannel 接受连接时(请参阅下面的代码),我的理解是它以某种方式将客户端移动到一个新的随机选择的端口。这个对吗?有没有办法从一个范围内选择这个端口?我问是因为当我编写这样的服务器并将其部署到 VM 时,我希望能够仅将一组端口列入白名单。如果 accept() 调用可以选择任何随机端口,我该如何实现?我不是必须打开所有端口吗?
ServerSocketChannel 套接字 = ServerSocketChannel.open();
socket.bind(new InetSocketAddress("localhost", 1111));
... ..
SocketChannel 接受Socket= socket.accept();
客户端代码非常简单(请参阅下面的代码)。
SocketChannel 客户端= SocketChannel.open(new InetSocketAddress("localhost", 1111)); .....//初始化一个缓冲区
客户端.write(缓冲区);
现在这个客户端正在尝试连接到端口 1111。客户端如何确定它被重定向到哪个端口?它怎么知道写操作必须发生在服务器选择的不同端口上?