Hallo liebes Forum,
ich habe mal wieder eine Anfängerfrage.
Und zwar versuche ich gerade ein Server zu erstellen, der mehrere Clientanfragen entgegennimmt und jeweils in einem separaten Thread steckt. Soweit so gut.
Wenn ich das richtig verstehe, dann öffnet meine Arbeiterklasse einen InputStream und blockiert solange, bis dieser eine Nachricht erhalten hat und ich glaube, dass genau hier mein Problem liegt.
Wenn nämlich der Client die Verbindung kappt (z.B. durch Verbindungsprobleme), dann bleibt dessen Thread ewig erhalten und ich weiß irgendwie gerade nicht, wie ich dem entgegenwirken kann.
Wenn der Client sich dann neu verbindet, dann erhält dieser eine neue IP und somit einen neuen Thread und der alte bleibt erhalten. :noe:
Hier ist mein Testcode:
ich habe mal wieder eine Anfängerfrage.
Und zwar versuche ich gerade ein Server zu erstellen, der mehrere Clientanfragen entgegennimmt und jeweils in einem separaten Thread steckt. Soweit so gut.
Wenn ich das richtig verstehe, dann öffnet meine Arbeiterklasse einen InputStream und blockiert solange, bis dieser eine Nachricht erhalten hat und ich glaube, dass genau hier mein Problem liegt.
Wenn nämlich der Client die Verbindung kappt (z.B. durch Verbindungsprobleme), dann bleibt dessen Thread ewig erhalten und ich weiß irgendwie gerade nicht, wie ich dem entgegenwirken kann.
Wenn der Client sich dann neu verbindet, dann erhält dieser eine neue IP und somit einen neuen Thread und der alte bleibt erhalten. :noe:
Hier ist mein Testcode:
Java:
package testserver_v2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class WorkerRunnable implements Runnable{
protected Socket clientSocket = null;
protected String serverText = null;
protected ServerSocket serverSocket = null;
public WorkerRunnable(Socket clientSocket, ServerSocket serverSocket, String serverText) {
this.clientSocket = clientSocket;
this.serverSocket = serverSocket;
this.serverText = serverText;
}
public void run() {
try {
while(!serverSocket.isClosed())
{
System.out.println("Host: "+serverText);
System.out.println("Connected:" + clientSocket.isConnected());
System.out.println("Aktuelle Anzahl von Threads:" + Thread.activeCount());
BufferedReader bufferedReader =
new BufferedReader(
new InputStreamReader(
clientSocket.getInputStream()));
char[] buffer = new char[1024];
int anzahlZeichen = bufferedReader.read(buffer, 0, 1024);
String nachricht = new String(buffer, 0, anzahlZeichen);
System.out.println("Input: "+nachricht);
}
System.out.println("Client "+ Thread.currentThread().getName()+" Verbindung beendet!");
} catch (IOException e) {
//report exception somewhere.
e.printStackTrace();
}
}
}
Zuletzt bearbeitet: