java. net. ConnectException: connexion refusée

J'essaie d'implémenter une connexion TCP, tout fonctionne bien du côté du serveur mais quand 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 était 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);
                }
            }
        }
    }
}
140
demandé sur Ashish Aggarwal 2011-07-29 20:37:51

14 réponses

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 au mauvais 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
répondu Collin Price 2018-01-31 12:17:51

Je vérifierais:

  • Nom D'hôte et port auquel vous essayez de vous connecter
  • Le serveur a réussi à commencer à écouter 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, alors le problème est dans votre code client. Si ce n'est pas le cas, vous devez comprendre pourquoi ce n'est pas le cas. Wireshark peut vous aider ce front.

31
répondu 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);

Do

Socket clientSocket = new Socket(serverName, 5000);

Le client doit se connecter à serverName {[13] } 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, c'est tout au sujet des adresses IP...

4
répondu 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 IPS et ports autorisés 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 une adresse ip et votre nouveau port. maintenant, vous devriez être capable de vous connecter sans aucun problème.

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

4
répondu 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
répondu 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 était avec 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
répondu 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
répondu 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
répondu 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
répondu user1419243 2017-08-23 13:42:04

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

0
répondu 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
répondu 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 connexion refusée "

Point à noter - Quand je suis juste allé au navigateur sur le PC et 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 localhost que 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'adresse IP de votre machine locale, vous pouvez utiliser la commande ipconfig sur cmd vous obtiendrez IPv4 quelque chose comme 192.68.xx.aa Le tour est joué ..C'est L'adresse IP de votre machine où vous avez hébergé votre serveur. utilisez-le alors au lieu de localhost

http://192.168.72.66/my_api/login.php


Note-vous ne serez pas en mesure d'atteindre cette adresse IP privée de tout noeud en dehors de cet ordinateur. (Au cas où vous en auriez besoin, vous pouvez utiliser Ngnix pour cela)

0
répondu eRaisedToX 2018-02-26 17:03:35

Il se peut qu'une instance précédente du client soit toujours en cours d'exécution et en écoute sur le port 5000.

-1
répondu Michael Munsey 2013-01-10 18:27:06

Essayez déconnectez {[2] } d'Internet (vous pouvez désactiver le wifi).

-4
répondu Shady Sirhan 2015-05-31 16:50:43