Java 无法将套接字绑定到我的本地地址
我有一个Java 无法将套接字绑定到我的本地地址,java,sockets,binding,Java,Sockets,Binding,我有一个javax.net.SSLSocket SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); SSLSocket sslSocket = (SSLSocket) sslsocketfactory.createSocket(host, hostPort, InetAddress.getByName(localAddress), localPort); sslSocket.s
javax.net.SSLSocket
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslSocket = (SSLSocket) sslsocketfactory.createSocket(host, hostPort, InetAddress.getByName(localAddress), localPort);
sslSocket.startHandshake();
我的客户端连接到服务器没有问题。
当我关闭连接sslSocket.close()
并尝试使用相同的本地地址和相同的主机地址但不同的主机端口和不同的本地端口初始化一个新套接字时,连接被拒绝,我得到java.net.ConnectException:连接被拒绝
:
SSLSocket sslSocket2 = (SSLSocket) sslsocketfactory.createSocket(host, hostPort2, InetAddress.getByName(localAddress), localPort2);
sslSocket2.startHandshake();
奇怪的是,当我尝试重新初始化新套接字而不将其绑定到本地地址和端口时,它工作正常:
SSLSocket sslSocket2 = (SSLSocket) sslsocketfactory.createSocket(host, port2);
有人知道发生了什么吗?所以在大量挖掘之后,我找到了防止这种异常发生的方法。在套接字初始化之后,您需要添加行
sslSocket.setSoLinger(true,0)代码>。
这里解释了索林格的工作原理。
我仍然不确定这是否是解决问题的正确方法,但我希望它能帮助有类似问题的人。因此,在大量挖掘之后,我找到了防止这种异常发生的方法。在套接字初始化之后,您需要添加行sslSocket.setSoLinger(true,0)代码>。
这里解释了索林格的工作原理。
我仍然不确定这是否是解决问题的正确方法,但我希望它能帮助有类似问题的人