无法创建套接字:java.net.ConnectException:连接被拒绝:连接

时间:2012-01-11 07:19:56

标签: java sockets connectionexception

我要创建一个套接字并获得InputStream。这是我尝试的方式。

try {
    final String serverIP = "111.111.111.111";
    final int serverPort = Integer.parseInt(server_port);
    final InetAddress serverAd=InetAddress.getByName(serverIP);
    final InetAddress localAd =InetAddress.getByName(local_ip);  
    final int localPort = 4040;

    Socket socket = new Socket(serverAd, serverPort, localAd, localPort);  
}  

但是有一个例外,

java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:276)
    at shootist.Porter.run(Porter.java:41)

此处服务器向我发送rtp数据,服务器端正常并确认。我发了邀请,也得到了200。如果我的IP和端口出现问题,我认为,所有响应都无法传送到我的IP和给定的端口。但是,当服务器向我发送对我的IP和给定端口号的响应时,它不会发生。 我该如何解决这个问题?我哪里错了什么?

2 个答案:

答案 0 :(得分:9)

“连接被拒绝”错误意味着服务器计算机上的套接字堆栈收到了您的连接请求,并故意拒绝接受它。出现这种情况的原因有两个:

1)您尝试连接的端口上没有运行侦听套接字。

2)有一个侦听套接字,但其待处理连接的积压已满,因此此时无法为您的请求排队。

要区分这两者,请尝试重新连接几次,并在每次尝试之间延迟。如果你始终得到相同的错误,那么#1可能是罪魁祸首。确保端口号正确无误。如果#2是罪魁祸首,你的重新连接最终有可能成功。

答案 1 :(得分:1)

拒绝连接意味着您尝试连接到未在该端口上侦听的服务器,或者过于积压以接受连接。

测试此方法的一种简单方法是尝试

 telnet 111.111.111.111 4040