ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
783
783
EMPFEHLEN
-
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 :1 2 3 4 5 6 7 8 9 10 11
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
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.
beste grüße
Ähnliche Themen
-
Socket aus anderem Thread schliessen
Von StehtimSchilf im Forum .NET Web und KommunikationAntworten: 4Letzter Beitrag: 25.06.10, 13:41 -
SWT Wert aus Grafikthread in anderem Thread auslesen?
Von Another1 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 27.02.09, 11:55 -
String in einen OutputStream schreiben - welche Klassen verwenden?
Von DarthShader im Forum JavaAntworten: 6Letzter Beitrag: 17.07.08, 09:34 -
Fenster mit anderem Thread öffnen
Von Knight_Rider im Forum .NET Windows FormsAntworten: 2Letzter Beitrag: 05.01.08, 19:07 -
java client mit c server kommunizieren lassen
Von tameck im Forum JavaAntworten: 7Letzter Beitrag: 09.10.07, 10:42





Zitieren
Login





