Maison  >  Article  >  Java  >  Pourquoi mon serveur Java ne répond-il pas aux demandes des clients ?

Pourquoi mon serveur Java ne répond-il pas aux demandes des clients ?

DDD
DDDoriginal
2024-11-10 05:41:02544parcourir

Why Does My Java Server Fail to Respond to Client Requests?

Le serveur ne parvient pas à répondre au client dans la communication socket Java

En Java, lorsque vous tentez d'établir une communication socket entre un client et un serveur, il est Il est possible de rencontrer des situations dans lesquelles le serveur ne répond pas au client. Cela peut être dû à plusieurs raisons, que nous explorerons dans cet article.

Communication socket client-serveur

Pour initier la communication, le serveur crée généralement un ServerSocket et écoute les connexions entrantes sur un port spécifique. Une fois qu'un client se connecte, le serveur crée un objet Socket pour établir la connexion. Le client crée également un objet Socket pour établir une connexion avec le serveur.

Code du serveur

public class Server {

    public static void main(String[] args) throws IOException {
        ServerSocket ss = null;
        Socket s = null;
        try {
            // Create a server socket and listen on port 34000
            ss = new ServerSocket(34000);

            // Accept an incoming connection from a client
            s = ss.accept();

            // Create input and output streams for communication
            BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
            OutputStreamWriter out = new OutputStreamWriter(s.getOutputStream());

            // Continuously read messages from the client
            while (true) {
                String string = in.readLine();
                if (string != null) {
                    System.out.println("br: " + string);

                    // Respond to the "end" message from the client
                    if (string.equals("end")) {
                        out.write("to end");
                        out.flush();
                        out.close();
                        System.out.println("end");
                        // break;
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // Close the socket connections
            s.close();
            ss.close();
        }
    }
}

Code client

public class Client {

    public static void main(String[] args) {
        Socket socket = null;
        try {
            // Create a client socket and connect to the server on port 34000
            socket = new Socket("localhost", 34000);
            
            // Create input and output streams for communication
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream());

            // Send a message to the server
            String string = "end";
            out.write(string);
            out.flush();

            // Listen for the server's response
            while (true) {
                String string2 = in.readLine();
                if (string2.equals("to end")) {
                    System.out.println("yes sir");
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // Close the socket connection
            socket.close();
        }
    }
}

Dépannage

Si le serveur ne parvient pas à répondre au client, il y a plusieurs raisons possibles :

  • Caractère de nouvelle ligne manquant : Lors de l'écriture de messages à l'aide d'un OutputStreamWriter, il est nécessaire d'ajouter un caractère de nouvelle ligne ("rn") à la fin du message. Cela signale la fin du message à l’extrémité distante. Dans le code fourni, le message "fin" est envoyé sans caractère de nouvelle ligne, ce qui peut amener le serveur à l'ignorer.

Solution : Ajoutez "rn" au fin du message envoyé à la fois par le client et le serveur.

string = "end\r\n";
out.write(string);
out.flush();
out.write("to end\r\n");
out.flush();
  • Connexion réseau fluctuante : Si le client et le serveur s'exécutent sur des ordinateurs différents, la connexion réseau entre eux peut être instable ou interrompue, entraînant un échec de la communication.

Solution : Vérifiez la connexion réseau et recherchez d'éventuels pare-feu ou paramètres de routeur susceptibles de bloquer connexions entrantes ou sortantes.

  • Configuration de port incorrecte : Assurez-vous que le client et le serveur utilisent le même numéro de port pour la communication. Dans le code fourni, le serveur écoute sur le port 34000, le client doit donc également se connecter à ce port.

Solution : Ajustez le numéro de port dans le client et le serveur code si besoin.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn