Java NIO构造—socketchannel和socketserverchannel在内部是如何工作的?

Java NIO构造—socketchannel和socketserverchannel在内部是如何工作的?,sockets,nio,serversocket,socketchannel,java-nio,Sockets,Nio,Serversocket,Socketchannel,Java Nio,我有一些关于socketchannel和socketserverchannel如何工作的具体问题:- 当ServerSocketChannel接受连接(请参阅下面的代码)时,我的理解是它以某种方式将客户端移动到一个随机选择的新端口。这是正确的吗?有没有办法从范围中选择此端口?我这样问是因为当我将这样一个服务器写入并部署到VM时,我希望能够只将一组端口列为白名单。如果accept()调用可以选择任何随机端口,我如何实现这一点?难道我不需要打开所有的港口吗 ServerSocketChannel s

我有一些关于socketchannel和socketserverchannel如何工作的具体问题:-

  • 当ServerSocketChannel接受连接(请参阅下面的代码)时,我的理解是它以某种方式将客户端移动到一个随机选择的新端口。这是正确的吗?有没有办法从范围中选择此端口?我这样问是因为当我将这样一个服务器写入并部署到VM时,我希望能够只将一组端口列为白名单。如果accept()调用可以选择任何随机端口,我如何实现这一点?难道我不需要打开所有的港口吗

    ServerSocketChannel socket=ServerSocketChannel.open()

    bind(新的InetSocketAddress(“localhost”,1111))

    。。。

    SocketChannel acceptedSocket=socket.accept()

  • 客户端代码非常简单(请参阅下面的代码)

    SocketChannel client=SocketChannel.open(新的InetSocketAddress(“localhost”,1111)); ..…//初始化缓冲区

    client.write(缓冲区)


  • 现在,该客户端正在尝试连接到端口1111。客户端如何确定它被重定向到的端口?它如何知道写入操作必须发生在服务器选择的不同端口上?

    结果证明我理解错了。接受连接时,不会创建新端口,而是为同一端口创建新的套接字描述符。在服务器上为每个客户机创建不同的套接字描述符,与该客户机的所有交互都是通过该描述符进行的。这允许服务器并行处理多个客户端


    原来我理解错了。接受连接时,不会创建新端口,而是为同一端口创建新的套接字描述符。在服务器上为每个客户机创建不同的套接字描述符,与该客户机的所有交互都是通过该描述符进行的。这允许服务器并行处理多个客户端