java. net. ConnectException: Connexion refusée


J'essaie d'implémenter une connexion TCP, tout fonctionne bien du côté du serveur mais lorsque j'exécute le programme client (à partir de l'ordinateur client), j'obtiens l'erreur suivante:

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)

J'ai essayé de changer le numéro de socket au cas où il serait utilisé, mais en vain, est-ce que quelqu'un sait ce qui cause cette erreur et comment la réparer.

Le code du serveur:

//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);
                }

            }

        }
    }
}

Le code Client:

//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);
                }
            }
        }
    }
}
Author: Ashish Aggarwal, 2011-07-29

14 answers

Cette exception signifie qu'il n'y a pas d'écoute de service sur l'IP/le port auquel vous essayez de vous connecter:

  • Vous essayez de vous connecter à la mauvaise adresse IP/port.
  • Vous n'avez pas démarré votre serveur.
  • Votre serveur n'écoute pas les connexions.
  • Sur les serveurs Windows, la file d'attente listen backlog est pleine.
 252
Author: Collin Price, 2018-01-31 12:17:51

Je vérifierais:

  • Nom d'hôte et port auquel vous essayez de vous connecter
  • Le côté serveur a réussi à démarrer l'écoute correctement
  • Aucun pare-feu ne bloque la connexion

Le point de départ le plus simple est probablement d'essayer de se connecter manuellement à partir de la machine cliente en utilisant telnet ou Putty. Si cela réussit, le problème réside dans votre code client. Si ce n'est pas le cas, vous devez déterminer pourquoice n'est pas le cas. Wireshark peut vous aider sur ce front.

 31
Author: Jon Skeet, 2011-07-29 16:39:41

Vous devez connecter votre socket client au ServerSocket distant. Au lieu de

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

Faire

Socket clientSocket = new Socket(serverName, 5000);

Le client doit se connecter à ServerName qui doit correspondre au nom ou à l'adresse IP de la boîte sur laquelle votre ServerSocket a été instancié (le nom doit être accessible depuis la machine cliente). BTW: Ce n'est pas le nom qui est important, tout est une question d'adresses IP...

 4
Author: home, 2011-07-30 10:26:16

J'ai eu le même problème avec le courtier Mqtt appelé vernemq.mais résolu en ajoutant ce qui suit.

  1. $ sudo vmq-admin listener show

Pour afficher la liste o autorisé IPS et ports pour vernemq

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

Pour ajouter n'importe quelle adresse IP et votre nouveau port. maintenant, vous devriez pouvoir vous connecter sans aucun problème.

J'espère que cela résout votre problème. entrez la description de l'image ici

 4
Author: MrOnyancha, 2016-04-05 07:58:11

J'ai eu le même problème, mais l'exécution du serveur avant d'exécuter le client l'a corrigé.

 3
Author: Dao Lam, 2012-07-25 18:09:57

Espère que mon expérience peut être utile à quelqu'un. J'ai fait face au problème avec la même trace de pile d'exception et je ne pouvais pas comprendre quel était le problème. Le serveur de base de données que j'essayais de connecter était en cours d'exécution et le port était ouvert et acceptait les connexions.

Le problème concernait la connexion Internet. La connexion Internet que j'utilisais n'était pas autorisée à se connecter au serveur correspondant. Lorsque j'ai changé les détails de la connexion, le problème a été résolu.

 2
Author: phoenix, 2014-11-17 12:01:44

J'ai eu cette erreur parce que {[0] } qui essaient d'accepter le nombre de clients à l'intérieur (je n'ai pas fini d'accepter tous les clints)

Alors faites attention où fermer votre socket

 1
Author: Basheer AL-MOMANI, 2016-05-21 21:07:19

Dans mon cas, j'ai donné au socket le nom du serveur (dans mon cas "raspberrypi"), et à la place une adresse IPv4 l'a fait, ou pour spécifier, IPv6 a été cassé (le nom résolu en IPv6)

 1
Author: Zhyano, 2016-12-21 18:30:22

Dans mon cas, j'ai dû mettre une coche près de Expose daemon on tcp://localhost:2375 without TLS dans docker paramètre (sur le côté droit de la barre des tâches, cliquez sur docker, select setting)

 1
Author: user1419243, 2017-08-23 13:42:04

Numéro de port toujours différent aux deux extrémités

 0
Author: Harshil Kulkarni, 2017-03-01 09:18:59

J'ai eu le même problème et le problème était que je ne fermais pas l'objet socket.Après avoir utilisé socket.close (); problème résolu. Ce code fonctionne pour moi.

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();
    }
}

Et 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
Author: Santosh Karna, 2017-05-14 17:13:24

Un point que je tiens à ajouter aux réponses ci-dessus est mon expérience-

"j'ai hébergé sur mon serveur sur localhost et a tenté de se connecter via un émulateur android, en spécifiant une URL correcte, comme http://localhost/my_api/login.php . Et je recevais erreur de refus de connexion "

Point à noter- Quand je viens de passer au navigateur sur le PC et d'utiliser la même URL (http://localhost/my_api/login.php) Je recevais une réponse correcte

Donc le problème dans mon cas était le terme localhostque j'ai remplacé par le IP pour mon serveur (car votre serveur est hébergé sur votre machine) qui le rendait accessible depuis mon émulateur sur le même PC.


Pour obtenir l'IP de votre machine locale, vous pouvez utiliser ipconfig commande cmd vous obtiendrez IPv4 quelque chose comme 192.68.xx.aa Le tour est joué ..c'est l'adresse IP de votre machine où votre serveur est hébergé. utilisez-le alors au lieu de localhost

http://192.168.72.66/my_api/login.php


Remarque - vous ne pourrez pas accéder à cette adresse IP privée depuis n'importe quel nœud en dehors de cet ordinateur. (Au cas où vous en auriez besoin, vous pouvez utiliser Ngnix pour cela)

 0
Author: eRaisedToX, 2018-02-26 17:03:35

Il se pourrait qu'il y ait une instance précédente du client toujours en cours d'exécution et à l'écoute sur le port 5000.

 -1
Author: Michael Munsey, 2013-01-10 18:27:06

Essayezdéconnectez d'Internet (vous pouvez désactiver le wifi).

 -4
Author: Shady Sirhan, 2015-05-31 16:50:43