2

我将创建一个套接字并获得一个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 和给定端口号的响应。我该如何解决这个问题?我哪里错了,什么?

4

2 回答 2

11

“连接被拒绝”错误意味着服务器机器上的套接字堆栈收到了您的连接请求并故意拒绝接受它。发生这种情况有两个可能的原因之一:

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

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

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

于 2012-01-11T07:32:18.027 回答
1

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

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

 telnet 111.111.111.111 4040
于 2012-01-11T07:28:27.137 回答