Bei Server-Client-Kommun. Outputstream von anderem Thread verwenden lassen

PAX523

Grünschnabel
Hallo Freunde.

Ich finde zu meinem Problem keine Lösung. Aber vielleicht habt ihr damit bereits Erfahrung gemacht.

Ich versuche mit den Klassen, Socket und ServerSocket, ein einfaches Anfrage-/Antwortszenario zu realisieren. Sofern beide Programme (Server und Client) direkt miteinander kommunizieren, klappt das auch. Doch sobald ich den Server bei jeder Anfrage einen neuen Thread erzeugen lasse, der dann in den Outputstream schreiben soll, scheint er unendlich lange zu schreiben, bzw. nie zum Ende zu kommen. Ich habe zum einen probiert, lediglich eine Referenz auf das BufferedOutputStream-Objekt an den neuen Thread zu übergeben und zum anderen versuchte ich es damit, die Referenz des von der accept-Methode zurückgelieferten Socket-Objektes dem neuen Thread zu geben. Beides leider nachwievor erfolglos. Bei zweiterer Variante funktioniert noch nicht einmal das einlesen der Anfrage-Bytes.

Server erzeugen nunmal für jede Anfrage einen seperaten Thread. Doch wie soll ich das realisieren, wenn dann die Streams nicht mehr funktionieren?

Hier der (vereinfachte) Clientcode zur ungefähren Illustration:
Code:
Socket server = null;
            try
            {
                        server = new Socket("paxnotebook", 23235);
                        BufferedInputStream in = new BufferedInputStream(server.getInputStream());
                        BufferedOutputStream out = new BufferedOutputStream(server.getOutputStream());
                        
                        out.write(86);
                        out.flush();
                        System.out.println("Antwort: "+in.read());
...

Hier der Server (vereinfacht):
Code:
        Socket client = null;
        ServerSocket serverSocket = new ServerSocket(23235);
...
        while (true)
        {
                client = serverSocket.accept();

                if (client != null)
                {
                    new Test(client);
                    client = null;
                }
        }
...

Der neu erzeugte Thread:
Code:
private Socket client;

    public Test(Socket client)
    {
        this.client = client;
        //this.setDaemon(true);
        this.start();
    }

    @Override
    public void run()
    {
        try
        {
            System.out.println("Anfrage wird verarbeitet...");
            BufferedInputStream in = new BufferedInputStream(client.getInputStream());
            BufferedOutputStream out = new BufferedOutputStream(client.getOutputStream());
            StringBuffer inpStream = new StringBuffer();
            for (int b = in.read(); b != -1; b = in.read())
                inpStream.append((char) b);

            System.out.println("Anfrage erhalten: " + inpStream);
            out.write(23);
            out.flush();
...


Nun bin ich gespannt. :)

Beste Grüße


PAX
 
dann formuliere ich die frage einmal etwas um.

wie ist es möglich, ein server-/client-szenario zu implementieren, bei dem der server für jede anfrage einen seperaten thread erstellt und dieser wiederum in einem outputstream antworten senden kann?

ich fände es etwas seltsam, wenn das schlicht weg nicht möglich wäre. :rolleyes:

beste grüße
 

Neue Beiträge

Zurück