java. net. ConnectException: Connexion refusée: connexion survenue


J'essaie d'exécuter le code dans une ligne comman Windows et j'ai reçu une exception:

D:\dasi\java\javaLab>java ServerClient
java.net.ConnectException: Connection refused: connect
java.lang.StringIndexOutOfBoundsException: String index out of range: -2

D:\dasi\java\javaLab>

Dans une autre ligne de commande windw :

D:\dasi\java\javaLab>java SocketClient
java.net.ConnectException: Connection timed out: connect

D:\dasi\java\javaLab>

Code du serveur:

import java.io.*;
import java.net.*;
public class ServerClient {
    public ServerClient(int port) {
        Server server = new Server(port);
        server.start();
        Client client = new Client(port);
        client.start();
    }
    public static void main(String[] args) {
        ServerClient s1 = new ServerClient(7777);
    }
}

class Server extends Thread {
    int port;
    ServerSocket server;
    Socket socket;
    DataOutputStream outStream = null;
    DataInputStream inStream = null;
    public Server(int poort) {
        try {
            this.port = port;
            server = new ServerSocket(port);
        }
        catch(Exception e) {
            System.out.println(e.toString());
        }
    }
    public void run() {
        try {
            socket = server.accept();
            outStream = new DataOutputStream(socket.getOutputStream());
            inStream = new DataInputStream(socket.getInputStream());
            System.out.println("server is ok, please continue!");
            while(true) {
                String str = inStream.readUTF();
                System.out.println("The server receive String:"+str);
                outStream.writeUTF(str);
            }
        }
        catch(Exception e) {
            System.out.println(e.toString());
        }
    }
}

class Client extends Thread {
    int port;
    Socket socket;
    DataInputStream inStream = null;
    DataOutputStream outStream = null;
    public Client(int port) {
        try {
            this.port = port;
            socket = new Socket(InetAddress.getLocalHost(),port);
            inStream = new DataInputStream(socket.getInputStream());
            outStream = new DataOutputStream(socket.getOutputStream());
            System.out.println("client is ok, please continue!");
        }
        catch(Exception e) {
            System.out.println(e.toString());
        }
    }
    public void run() {
        try {
            while(true) {
                byte[] b = new byte[1024];
                String str = "";
                int m = System.in.read(b);
                str = new String(b,0,0,m-1);
                outStream.writeUTF(str);
                str = inStream.readUTF();
                System.out.println("The client receive String:"+str);
            }
        }
        catch(Exception e) {
            System.out.println(e.toString());
        }
    }
}

Code client:

import java.net.*;
import java.io.*;
public class SocketClient {
    Socket s = null;
    DataInputStream inStream = null;
    DataOutputStream outStream = null;
    public SocketClient() {
        try {
            init();
            waitData();
        }
        catch(Exception e) {
            System.out.println(e.toString());
        }
    }
    void init() throws Exception {
        s=new Socket("10.15.43.216",8765);
        inStream = new DataInputStream(s.getInputStream());
        outStream = new DataOutputStream(s.getOutputStream());
        s.setSoTimeout(3000);
    }
    void waitData() {
        while(true) {
            try {
                String str = inStream.readUTF();
                System.out.println("Client accept:" +str);
                str = Integer.toString(Integer.parseInt(str)+1);
                outStream.writeUTF(str);
            }
            catch(Exception e) {
                System.out.println(e.toString());
                break;
            }
        }
    }
    public static void main(String[] args) {
        new SocketClient();
    }
}

Je me demande s'il y a quelque chose de mal dans mon code ou si c'est le port de mon ordinateur qui cause le problème. Parce que quand j'ai vérifié le port de mon ordinateur, je n'ai pas vu 7777. Lorsque j'ai émis la commande netstat-nao / findstr 7777, il n'a rien retourné.

D:\dasi\java\javaLab>netstat -nao | findstr 7777

D:\dasi\java\javaLab>

Si c'était le port problème, comment ouvrir le port 7777. Je suis un débutant ici, s " il vous plaît aider. Merci beaucoup!

Author: Lily, 2016-12-30

1 answers

Remplacer

 public Server(int poort) {
    try {
        this.port = port;
        ...
    }
}

Avec

 public Server(int poort) {
    try {
        this.port = port;
        ...
    }
}

Ou plutôt la valeur par défaut de port est zéro, alors votre serverSocket se liera avec 0 port plutôt que 7777.

Et comme pour ce segment de code:

public ServerClient(int port) {
    Server server = new Server(port);
    server.start();
    Client client = new Client(port);
    client.start();
}

Je crains qu'il soit facile de vous causer des problèmes, car nous ne pouvons pas nous assurer que le thread serveurs'exécutera avant thread clientet si thread clients'exécute en premier lorsque le serveur n'a pas exécuté cela provoquera une erreur. Et vous avez déjà un client dans un autre fichier java, donc je ne peux pas comprendre pourquoi vous avez un client ici. Peut-être que vous pourriez les supprimer, le code peut être le suivant:

public ServerClient(int port) {
    Server server = new Server(port);
    server.start();
}

Comme pour Code client votre socket serveur est 7777, vous devez donc connecter le port 7777 plutôt que 8765 dans votre méthode d'initialisation peut-être que le code peut être le suivant:

void init() throws Exception {
    s=new Socket(server name,7777);
    ...
}
 1
Author: nail fei, 2016-12-30 03:53:36