无法使用我的本地地址绑定套接字

时间:2015-10-01 14:45:24

标签: java sockets binding

我有一个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:< / p>

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

奇怪的是,当我尝试重新初始化新套接字而不将其绑定到我的本地地址和端口时,它可以正常工作:

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

任何人都知道发生了什么事?

1 个答案:

答案 0 :(得分:0)

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