Maison > Java > javaDidacticiel > le corps du texte

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

DDD
Libérer: 2024-11-10 05:41:02
original
548 Les gens l'ont consulté

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();
        }
    }
}
Copier après la connexion

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();
        }
    }
}
Copier après la connexion

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();
Copier après la connexion
out.write("to end\r\n");
out.flush();
Copier après la connexion
  • 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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal