Heim >Java >javaLernprogramm >Warum reagiert mein Java-Server nicht auf Clientanfragen?

Warum reagiert mein Java-Server nicht auf Clientanfragen?

DDD
DDDOriginal
2024-11-10 05:41:02553Durchsuche

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

Server reagiert nicht auf Client in der Java-Socket-Kommunikation

In Java ist dies der Fall, wenn versucht wird, eine Socket-Kommunikation zwischen einem Client und einem Server einzurichten Es kann vorkommen, dass der Server nicht auf den Client antwortet. Dies kann mehrere Gründe haben, die wir in diesem Artikel untersuchen werden.

Client-Server-Socket-Kommunikation

Um die Kommunikation zu initiieren, erstellt der Server normalerweise einen ServerSocket und lauscht auf eingehende Verbindungen an einem bestimmten Port. Sobald ein Client eine Verbindung herstellt, erstellt der Server ein Socket-Objekt, um die Verbindung herzustellen. Der Client erstellt außerdem ein Socket-Objekt, um eine Verbindung mit dem Server herzustellen.

Servercode

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();
        }
    }
}

Clientcode

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();
        }
    }
}

Fehlerbehebung

Wenn der Server nicht auf die reagiert Client, es gibt ein paar mögliche Gründe:

  • Fehlendes Newline-Zeichen: Beim Schreiben von Nachrichten mit einem OutputStreamWriter ist es notwendig, am Ende ein Newline-Zeichen („rn“) anzuhängen der Nachricht. Dies signalisiert dem entfernten Ende das Ende der Nachricht. Im bereitgestellten Code wird die „Ende“-Nachricht ohne ein Zeilenumbruchzeichen gesendet, was dazu führen kann, dass der Server sie ignoriert.

Lösung: Fügen Sie „rn“ hinzu Ende der Nachricht, die sowohl vom Client als auch vom Server gesendet wird.

string = "end\r\n";
out.write(string);
out.flush();
out.write("to end\r\n");
out.flush();
  • Fluktuierendes Netzwerk Verbindung:Wenn sowohl der Client als auch der Server auf unterschiedlichen Computern ausgeführt werden, kann die Netzwerkverbindung zwischen ihnen instabil oder unterbrochen sein, was dazu führt, dass die Kommunikation fehlschlägt.

Lösung: Überprüfen Sie die Netzwerkverbindung und prüfen Sie, ob möglicherweise Firewalls oder Routereinstellungen ein- oder ausgehende Verbindungen blockieren Verbindungen.

  • Falsche Portkonfiguration: Stellen Sie sicher, dass sowohl der Client als auch der Server dieselbe Portnummer für die Kommunikation verwenden. Im bereitgestellten Code überwacht der Server Port 34000, daher muss sich auch der Client mit diesem Port verbinden.

Lösung: Passen Sie die Portnummer sowohl im Client als auch im Server an Geben Sie bei Bedarf einen Code ein.

Das obige ist der detaillierte Inhalt vonWarum reagiert mein Java-Server nicht auf Clientanfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn