228 votes

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 d'un ordinateur client), l'erreur suivante apparaît:

 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 y remédier?

Le code 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);
                }
            }
        }
    }
}
 

388voto

Collin Price Points 991

Cette exception se produit généralement lorsqu'il n'y a aucun service en écoute sur le port auquel vous essayez de vous connecter. Quelques choses pourraient se passer:

  • Vous n'avez pas démarré votre serveur.
  • Votre serveur n'attend pas pour accepter les connexions.
  • Vous essayez de vous connecter au mauvais numéro de port.

47voto

Jon Skeet Points 692016

Je voudrais vérifier:

  • Nom d'hôte et le port que vous essayez de vous connecter à
  • Le serveur a réussi à commencer à écouter correctement
  • Il n'y a pas de pare-feu bloque la connexion

Le plus simple point de départ est sans doute pour essayer de vous connecter manuellement à partir de l'ordinateur client à l'aide de telnet ou de Mastic. Si cela réussit, alors le problème est dans votre code client. Si cela ne fonctionne pas, vous devez savoir pourquoi il n'a pas. Wireshark peut vous aider sur ce front.

8voto

home Points 8667

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

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

faire

Socket clientSocket = new Socket(serverName, 5000);

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

8voto

Dao Lam Points 523

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

1voto

S E Points 1087

J'ai essayé votre code et je n'ai aucun problème sur ma machine. il doit être quelque chose qui bloque votre connexion ou bien vous êtes de départ dans le bon ordre. Êtes-vous sûr que votre serveur n'est pas fermé lorsque vous démarrez le client. Mon processus est ça. mettre à la fois classe de fichier dans un répertoire, puis ouvert 2 invites de commande vers le répertoire d'exécuter séparément. si vous utilisez un IDE, il peut être de fermer le serveur automatiquement, ce qui est pourquoi je vous recommande de le faire de cette façon

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X