2015-10-01 85 views
1

套接字绑定我有一个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: Connection refused

SSLSocket sslSocket2 = (SSLSocket) sslsocketfactory.createSocket(host, hostPort2, InetAddress.getByName(localAddress), localPort2); 
sslSocket2.startHandshake(); 

什么很奇怪的是,当我尝试重新初始化新的socket不绑定到我的本地地址和端口然后正常工作:

SSLSocket sslSocket2 = (SSLSocket) sslsocketfactory.createSocket(host, port2); 

人有任何想法是怎么回事?

回答

0

因此,在挖掘负载后,我发现防止发生这种异常的原因。在套接字初始化之后,您需要添加行sslSocket.setSoLinger(true, 0);。 SoLinger如何工作在这里解释http://www.jguru.com/faq/view.jsp?EID=33897。 那么我仍然不确定这是否是解决问题的正确方法,但我希望它能帮助有类似问题的人。