Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法创建套接字:java.net.ConnectException:连接被拒绝:连接_Java_Sockets_Connectionexception - Fatal编程技术网

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

无法创建套接字:java.net.ConnectException:连接被拒绝:连接,java,sockets,connectionexception,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 =InetAddr

我将创建一个套接字并获得一个
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)
java.net.ConnectException:连接被拒绝:连接
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
位于java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
在java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
位于java.net.socksocketimpl.connect(socksocketimpl.java:366)
位于java.net.Socket.connect(Socket.java:529)
位于java.net.Socket.connect(Socket.java:478)
位于java.net.Socket(Socket.java:375)
位于java.net.Socket(Socket.java:276)
at shootist.Porter.run(Porter.java:41)
在这里,服务器向我发送rtp数据,服务器端正常并已确认。我发了邀请信,也收到了200份。如果我的IP和端口有问题,我想,所有的响应都不能发送到我的IP和给定的端口。但当服务器向我的IP和给定的端口号发送响应时,这种情况就不会发生。
我如何解决这个问题?我错在哪里?什么?

连接被拒绝意味着您正在尝试连接到一个未在该端口上侦听的服务器,或者该服务器已积压,无法接受连接

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

 telnet 111.111.111.111 4040
“连接被拒绝”错误意味着服务器计算机上的套接字堆栈接收到您的连接请求并故意拒绝接受。发生这种情况的原因有两种:

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

2) 有一个侦听套接字,但它的待定连接积压已满,因此此时没有空间对您的请求进行排队


要区分两者,请尝试重新连接几次,每次尝试之间都有延迟。如果你总是犯同样的错误,那么#1很可能是罪魁祸首。确保端口号正确。如果#2是罪魁祸首,则您的重新连接有可能最终成功。

将防火墙例外添加到服务器和客户端计算机上的端口号。更妙的是,把你的防火墙扔出你的电脑。谢谢。让我知道如何将防火墙异常添加到客户端计算机上的端口号。这不是导致错误的唯一条件。看我的答案。@RemyLebeau TeamB积压工作的要点很好。服务器必须处于非常糟糕的状态才能重新记录。不一定。积压工作可能有点太小,服务器的
accept()
速率可能被编码为运行有点太慢。你永远不知道。一个常见的模式是有一个接受线程,它除了接受和创建处理程序外什么都不做。然而,一个加载的服务器可能会故意减慢接受的速度。完整而全面的答案+1.谢谢你,雷米。我更改了端口号并尝试了。但是同样的错误:(.你能告诉我如何创建一个成功的监听套接字吗?(我有点新。)你能解释更多吗“但是它的待处理连接积压已满,因此没有排队的空间……”。当我发送INVITE,然后服务器响应200,服务器开始向我发送数据时,我必须等待服务器发送响应并获取相应的服务器端口(因为服务器端口在响应中定义。INVITE被发送到另一个端口,套接字将在服务器决定的另一个端口上创建。)正如您所提到的,我尝试重新连接套接字。但由于发生了相同的错误,因此失败。当客户端尝试连接到服务器时,请求将被放入服务器队列,直到它调用
accept()
对请求进行出列。队列具有有限的大小,这是套接字开始侦听时指定的。请查看
java.net.ServerSocket
类构造函数的
backlog
参数的文档。如果无法连接到服务器返回到您的INVITE的IP/端口,请确保IP为空可从您的客户端计算机访问,并且其间没有防火墙/路由器可能会阻止连接。