Endlose Ladezeit im Browser

RezaScript

Bekanntes Mitglied
Hallo,

ich versuche grad ne Meldung vom Server und vom Client zu bekommen.

Server.java
Java:
package ch.yourclick.zt.chat;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

@WebServlet("/chat")
public class Server extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        try {
            ServerSocket server = new ServerSocket(5000);
            Socket client = server.accept();
            System.out.println("Server started");

            // Output
            OutputStream output = client.getOutputStream();
            PrintWriter writer = new PrintWriter(output);

            // Input
            InputStream input = client.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));

            String stream = null;
            while((stream = reader.readLine()) != null) {
                System.out.println("Client says: " + stream);
            }

            // Closing the streams
            writer.close();
            reader.close();

        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Client.java
Java:
package ch.yourclick.zt.chat;

import java.io.*;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        try {
            Socket client = new Socket("localhost", 5555);
            System.out.println("Client started");

            // Output
            OutputStream output = client.getOutputStream();
            PrintWriter writer = new PrintWriter(output);

            // Input
            InputStream input = client.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));

            writer.write("Hello Server!");
            writer.flush();

            // Closing the streams
            writer.close();
            reader.close();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Wenn ich die Seite aufrufe, gibt es eine endlose Ladezeit und in der Konsole bekomme ich keine Rückmeldung. Weder vom Server, noch vom Client. Was mache ich hier genau falsch?

Wenn ich in Intellij Redeploy mache, bekomme ich folgende Fehlermeldung:
23-May-2019 22:38:00.885 WARNUNG [RMI TCP Connection(5)-127.0.0.1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [zt_productions_war] is still processing a request that has yet to finish. This is very likely to create a memory leak. You can control the time allowed for requests to finish by using the unloadDelay attribute of the standard Context implementation. Stack trace of request processing thread:[ ...
 
Was mache ich hier genau falsch?
Mal abgesehen davon, dass die Portnummern nicht zusammenpassen: Du startest in einem Servlet einen Socket-Server und wartest auf eine Verbindung. D. h. Du hast einmal einen HTTP-Request, der die doGet-Methode triggert, die wartet dann darauf, dass sich jemand mit Port 5000 verbindet. Dann wird die Socket-Verbindung gehandelt und anschließend kehrt die doGet-Methode zurück.

Würdest Du Dein Servlet durch zwei HTTP-Requests aufrufen, würde das zweite fehlschlagen, denn der Port 5000 ist bereits in Benutzung.
 
Okay, das mit dem Port war ein guter Hinweis. Danke, hab's geändert.
Und das heißt, dass ich kein Socket-Server in einem Servlet starten soll? Wie müsste ich es dann machen, wenn der User etwas im Browser eingibt?
 

Zurück
Oben