该链接提供了有关打开非阻塞套接字的教程。但是,此处提供的方法没有提供选择任何随机端口的选项。同样,此java doc页面上显示的所有构造函数都将address作为参数。有什么办法吗?
它有点棘手的解决方案,但对我有用。您可以创建一个普通的Socket,将port参数设置为0(以便获得一个随机可用的套接字),然后在其上进行连接。现在关闭此套接字,并在创建SocketChannel时将此地址作为参数传递。但是要小心,这在线程正在并行创建套接字的多线程程序中可能是一个麻烦。考虑两个并行线程t1和t2。假设t1创建了一个套接字,以获取其地址,将其关闭,然后进行上下文切换。现在,t2具有相同的端口,而t1可以使用此套接字通过非阻塞通道进行连接。对于这种情况,最好一直循环直到未建立非阻塞(SocketChannel)连接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句