2012-01-11 164 views
2

我将创建一个套接字并获取InputStream。这是我如何尝试。无法创建套接字:java.net.ConnectException:连接被拒绝:connect

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和给定端口号的响应。 我该如何解决这个问题?我错在哪里?

+0

将防火墙例外添加到服务器和客户机上的端口号。更好的是,把你的防火墙从你的电脑中拿出来。 – Acn 2012-01-11 07:27:21

+0

谢谢。让我知道如何在客户端计算机上为端口号添加防火墙例外。 – 2012-01-11 08:05:17

回答

9

A“连接被拒绝”的错误是指在服务器上的插座组收到您的连接请求,并故意拒绝接受它。发生这种情况的原因有两个:

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

2)有一个监听套接字,但其待处理连接的积压已满,所以当时没有空间排队请求。

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

+0

完整全面的答案。 +1。 – 0xCAFEBABE 2012-01-11 07:41:04

+0

谢谢Remy.I改变了端口号并尝试了。但同样的错误:(。你会让我知道如何创建一个成功的侦听套接字(我不想让它变成新的) – 2012-01-11 08:10:01

+0

你能解释一下吗?“但是它的待处理连接积压已满,所以没有空间排队。 ...“任何方式,当我发送邀请,然后服务器响应与200和服务器开始发送数据。我必须等到服务器发送响应并获得相应的服务器的端口(因为服务器的端口是在response.INVITE被发送到另一个端口,并且套接字将在服务器决定的另一个端口上创建。)正如你所提到的,我试图重新连接套接字,但是它失败了,因为发生了同样的错误 – 2012-01-11 08:37:52

1

连接被拒绝意味着您尝试连接到一个服务器,该服务器不在该端口上侦听,或者太积压以接受连接。

一个简单的方法来测试,这是尝试

telnet 111.111.111.111 4040 
+1

这不是可能导致错误的唯一条件。看到我的答案。 – 2012-01-11 07:33:21

+0

@ RemyLebeau-TeamB在积压的好处。服务器必须以非常糟糕的方式重新记录。 – 2012-01-11 07:49:19

+0

不一定。积压可能有点过小,服务器的'accept()'速率可能会被编码为运行速度太慢。你永远不知道。 – 2012-01-12 00:05:04

相关问题