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:
Hier der Server (vereinfacht):
Der neu erzeugte Thread:
Nun bin ich gespannt.
Beste Grüße
PAX
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