java.net.ConnectException: Connection refused wenn SocketChannel.open aufgerufen wird

StackOverflow https://stackoverflow.com/questions/1073203

  •  21-08-2019
  •  | 
  •  

Frage

Ich versuche, ein einfaches Programm zu schreiben, einen Socket-Kanal an einer lokalen Adresse zu öffnen. Ich erhalte eine Verbindung abgelehnt Ausnahme, wenn ich dieses Programm ausführen

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.channels.SocketChannel;

public class testSocket {

        public static void main(String [] args) {
                try {
                        InetAddress addr = InetAddress.getByName("localhost");
                        InetSocketAddress remoteAddress = new InetSocketAddress(addr, 19015);

                        // Open a new Socket channel and set it to non-blocking
                        SocketChannel socketChannel = SocketChannel.open();
                        socketChannel.configureBlocking(false);

                        // Issue the Connect call on the remote address.
                        socketChannel.connect(remoteAddress);
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
}

Die Ausnahme, die ich erhalte, ist

java.net.ConnectException: Connection refused
        at sun.nio.ch.Net.connect(Native Method)
        at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:464)
        at testSocket.main(testSocket.java:17)

Ich begegne dieses Problem mit Sun Solaris und HP - UX. Es scheint auf einer Linux-Maschine zu funktionieren. Kann jemand lassen Sie mich wissen, warum die Verbindung abgelehnt wird? Ich habe ein netstat -a und bestätigt, dass der Port nicht verwendet wird.

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Von der Javadoc für SocketChannel.connect ()

  

Wenn dieser Kanal in non-blocking-Modus ist dann ein Aufruf dieser Methode löst einen nicht blockierende Verbindungsvorgang. Wenn die Verbindung sofort hergestellt wird, wie bei einer lokalen Verbindung passieren kann, gibt diese Methode true. Ansonsten ist diese Methode gibt false zurück und der Verbindungsvorgang muss später durch Aufrufen der finish Verfahren abgeschlossen sein.

Wenn ich den Code auf Linux laufen, connect () gibt false zurück, daher gibt es keine Ausnahme. Wenn Sie einen Anruf zu socketChannel.finishConnect () hinzufügen, sehen Sie die gleiche Verbindung Ausnahme verweigert, wie Sie auf Solaris / HP-UX erhalten.

Ich vermute, dass auf Solaris / HP-UX connect () gibt true zurück, damit die Ausnahme sofort ausgelöst wird.

Andere Tipps

Die „Connection refused“ Nachricht ist, was Sie erhalten werden, wenn kein Prozess auf Ihrem angegeben Port (19015) zu hören ist. Es sieht aus wie Sie versuchen, einen Dienst zu verbinden, die nicht da ist. netstat wird auch Sie sagen, dass der Port nicht verwendet wird!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top