it-swarm.com.de

java.net.ConnectException: Verbindung abgelehnt

Ich versuche, eine TCP -Verbindung zu implementieren. Alles funktioniert von der Serverseite aus. Wenn ich jedoch das Client-Programm (vom Client-Computer) aus ausführen, erhalte ich folgende Fehlermeldung:

Java.net.ConnectException: Connection refused
        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:432)
        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:189)
        at TCPClient.main(TCPClient.Java:13)

Ich habe versucht, die Socket-Nummer zu ändern, falls sie verwendet wurde, aber ohne Erfolg weiß jemand, was diesen Fehler verursacht und wie er behoben werden kann.

Der Servercode:

//TCPServer.Java

import Java.io.*;
import Java.net.*;

class TCPServer {
    public static void main(String argv[]) throws Exception {
        String fromclient;
        String toclient;

        ServerSocket Server = new ServerSocket(5000);

        System.out.println("TCPServer Waiting for client on port 5000");

        while (true) {
            Socket connected = Server.accept();
            System.out.println(" THE CLIENT" + " " + connected.getInetAddress()
                    + ":" + connected.getPort() + " IS CONNECTED ");

            BufferedReader inFromUser = new BufferedReader(
                    new InputStreamReader(System.in));

            BufferedReader inFromClient = new BufferedReader(
                    new InputStreamReader(connected.getInputStream()));

            PrintWriter outToClient = new PrintWriter(
                    connected.getOutputStream(), true);

            while (true) {

                System.out.println("SEND(Type Q or q to Quit):");
                toclient = inFromUser.readLine();

                if (toclient.equals("q") || toclient.equals("Q")) {
                    outToClient.println(toclient);
                    connected.close();
                    break;
                } else {
                    outToClient.println(toclient);
                }

                fromclient = inFromClient.readLine();

                if (fromclient.equals("q") || fromclient.equals("Q")) {
                    connected.close();
                    break;
                } else {
                    System.out.println("RECIEVED:" + fromclient);
                }

            }

        }
    }
}

Der Kundencode:

//TCPClient.Java

import Java.io.*;
import Java.net.*;

class TCPClient {
    public static void main(String argv[]) throws Exception {
        String FromServer;
        String ToServer;

        Socket clientSocket = new Socket("localhost", 5000);

        BufferedReader inFromUser = new BufferedReader(new InputStreamReader(
                System.in));

        PrintWriter outToServer = new PrintWriter(
                clientSocket.getOutputStream(), true);

        BufferedReader inFromServer = new BufferedReader(new InputStreamReader(
                clientSocket.getInputStream()));

        while (true) {

            FromServer = inFromServer.readLine();

            if (FromServer.equals("q") || FromServer.equals("Q")) {
                clientSocket.close();
                break;
            } else {
                System.out.println("RECIEVED:" + FromServer);
                System.out.println("SEND(Type Q or q to Quit):");

                ToServer = inFromUser.readLine();

                if (ToServer.equals("Q") || ToServer.equals("q")) {
                    outToServer.println(ToServer);
                    clientSocket.close();
                    break;
                } else {
                    outToServer.println(ToServer);
                }
            }
        }
    }
}
153

Diese Ausnahme bedeutet, dass kein Dienst die IP/den Port überwacht, zu dem Sie eine Verbindung herstellen möchten:

  • Sie versuchen, eine Verbindung mit der falschen IP/dem falschen Port herzustellen.
  • Sie haben Ihren Server nicht gestartet.
  • Ihr Server wartet nicht auf Verbindungen.
  • Auf Windows-Servern ist die Warteliste für das Überwachungs-Backlog voll.
270
Collin Price

Ich würde überprüfen:

  • Hostname und Port, zu dem Sie eine Verbindung herstellen möchten
  • Der Server hat es geschafft, richtig zu hören
  • Es gibt keine Firewall, die die Verbindung blockiert

Der einfachste Startpunkt ist wahrscheinlich der Versuch, eine manuelle Verbindung vom Client-Computer über Telnet oder PuTTY herzustellen. Wenn dies erfolgreich ist, liegt das Problem in Ihrem Clientcode. Wenn dies nicht der Fall ist, müssen Sie warum nicht klären. Wireshark kann dir an dieser Front helfen.

34
Jon Skeet

Ich hatte das gleiche Problem mit dem Mqtt-Broker namens vernemq.

  1. $ Sudo vmq-admin listener show

um die Liste der erlaubten IPS und Ports für Vernemq anzuzeigen

  1. $ Sudo vmq-admin listener start port=1885 -a 0.0.0.0 --mountpoint /appname --nr_of_acceptors=10 --max_connections=20000

fügen Sie eine beliebige IP-Adresse und Ihren neuen Port hinzu. Jetzt sollten Sie sich problemlos verbinden können. 

Hoffe es löst dein Problem .  enter image description here

4
MrOnyancha

Ich hatte das gleiche Problem, aber das Ausführen des Servers vor dem Ausführen des Clients hat ihn behoben. 

4
Dao Lam

Sie müssen Ihren Client-Socket mit dem Remote-ServerSocket verbinden. Anstatt

Socket clientSocket = new Socket("localhost", 5000);

tun

Socket clientSocket = new Socket(serverName, 5000);

Der Client muss eine Verbindung zu serverName herstellen, die mit dem Namen oder der IP der Box übereinstimmen sollte, auf der Ihr ServerSocket instanziiert wurde (der Name muss vom Client-Computer aus erreichbar sein). Übrigens: Es ist nicht der Name, der wichtig ist, es geht nur um IP-Adressen ...

4
home

Hoffe, dass meine Erfahrung für jemanden nützlich sein kann. Ich habe das Problem mit derselben Ausnahmestapel-Ablaufverfolgung gesehen und konnte nicht verstehen, was das Problem war. Der Datenbankserver, mit dem ich mich verbinden wollte, lief und der Port war offen und akzeptierte Verbindungen.

Das Problem war mit der Internetverbindung. Die Internetverbindung, die ich verwendete, durfte keine Verbindung zum entsprechenden Server herstellen. Wenn ich die Verbindungsdetails geändert habe, wurde das Problem behoben.

2
phoenix

Ein Punkt, den ich zu den Antworten oben hinzufügen möchte, ist meine Erfahrung -

"Ich habe auf meinem Server auf localhost gehostet und habe versucht, über einen Android-Emulator eine Verbindung herzustellen, indem ich die richtige URL wie http://localhost/my_api/login.php eingebe. Und ich bekam Verbindung abgelehnt Fehler "

Punkt zu beachten - Als ich gerade zum Browser auf dem PC ging und dieselbe URL (http://localhost/my_api/login.php) verwende, erhielt ich die richtige Antwort

das Problem in meinem Fall war also der Begriff localhost, den ich durch denIPfür meinen Server ersetzte (da Ihr Server auf Ihrem Computer gehostet wird), wodurch er von meinem Emulator auf demselben PC erreichbar war.


Um IP für Ihren lokalen Computer zu erhalten, können Sie den Befehl ipconfig für cmd Verwenden. Sie erhalten IPv4, beispielsweise 192.68.xx.yy .__ dann statt localhost

http://192.168.72.66/my_api/login.php


Hinweis - Sie können diese private IP von keinem Knoten außerhalb dieses Computers erreichen. (Falls Sie es brauchen, können Sie Ngnix dafür verwenden)

1
eRaisedToX

In meinem Fall musste ich in der Einstellung docker ein Häkchen in der Nähe von Expose daemon on tcp://localhost:2375 without TLS setzen (auf der rechten Seite der Taskleiste rechtsklicken Sie auf docker und wählen Sie setting).

1
user1419243

In meinem Fall habe ich dem Socket den Namen des Servers gegeben (in meinem Fall "raspberrypi"), und stattdessen eine IPv4-Adresse angegeben oder angegeben, dass IPv6 defekt war (der Name wurde in ein IPv6 aufgelöst)

1
Zhyano

ich habe diese Fehlermeldung erhalten, weil I closed ServerSocket inside a for loop versucht hat, die Anzahl der Clients darin zu akzeptieren.

seien Sie also vorsichtig, wo Sie den Sockel schließen

1

Ich hatte dasselbe Problem und das Problem war, dass ich Socket-Objekt nicht geschlossen habe. Nach der Verwendung von socket.close (); Problem gelöst ... Dieser Code funktioniert für mich.

ClientDemo.Java

public class ClientDemo {
    public static void main(String[] args) throws UnknownHostException,
            IOException {
        Socket socket = new Socket("127.0.0.1", 55286);
        OutputStreamWriter os = new OutputStreamWriter(socket.getOutputStream());
        os.write("Santosh Karna");
        os.flush();
        socket.close();
    }
}

und ServerDemo.Java

public class ServerDemo {
    public static void main(String[] args) throws IOException {
        System.out.println("server is started");
        ServerSocket serverSocket= new ServerSocket(55286);
        System.out.println("server is waiting");
        Socket socket=serverSocket.accept();
        System.out.println("Client connected");
        BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String str=reader.readLine();
        System.out.println("Client data: "+str);
        socket.close();
        serverSocket.close();

    }
}
0
Santosh Karna

Ich hatte das gleiche Problem, und es stellte sich heraus, dass die catalina.out-Datei nicht korrekt war. Es war vom Tomcat-Benutzer nicht beschreibbar. Nachdem ich die Berechtigungen korrigiert hatte, wurde das Problem behoben. Ich habe erfahren, dass es sich um ein Berechtigungsproblem aus den Protokollen in der Tomcat8-initd.log-Datei handelt:

/usr/sbin/Tomcat8: line 40: /usr/share/Tomcat8/logs/catalina.out: Permission denied

0
kbsbng

Die Portnummer ist an beiden Enden immer unterschiedlich

0