Невозможно создать сокет: java.net.ConnectException: соединение отказано: соединение - PullRequest
2 голосов
/ 11 января 2012

Я собираюсь создать сокет и получить 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 ]

9 голосов
/ 11 января 2012

Ошибка «отказано в соединении» означает, что стек сокетов на компьютере сервера получил ваш запрос на соединение и намеренно отказался принять его. Это происходит по одной из двух возможных причин:

1) на порте, к которому вы пытаетесь подключиться, не работает прослушивающий сокет.

2) имеется сокет прослушивания, но его незавершенное соединение с незавершенными соединениями заполнено, поэтому в данный момент нет места для очереди вашего запроса.

Чтобы провести различие между ними, попробуйте подключиться несколько раз с задержкой между попытками. Если вы постоянно получаете одну и ту же ошибку, вероятно, виновником является № 1. Убедитесь, что номер порта правильный. Если виновником является # 2, у вашего переподключения есть шанс на успех в конечном итоге.

1 голос
/ 11 января 2012

Отказ в соединении означает, что вы пытаетесь подключиться к серверу, который не прослушивает этот порт или слишком загружен, чтобы принять соединение.

Простой способ проверить это - попробовать

 telnet 111.111.111.111 4040
...