Ich habe einen Server- und Client-Code. Auf meinem Server warte ich auf die Verbindung und erstelle zwei Threads (momentan nur zwei Clients). Hier ist ein Ausschnitt meines Servercodes.Übergabe von verschiedenen Werten an Threads in Java-Netzwerken?
while (true) {
try {
Socket client = server.accept();
int i;
for (i = 0; i < 2; i++) {
if(threads[i] == null) {
(threads[i] = new ClientThread(client, threads, i + 1)).start();
break;
}
}
if(i == 2) {
PrintStream os = new PrintStream(client.getOutputStream());
os.println("Server too busy. Try later.");
os.close();
client.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
In meiner ClientThread-Klasse habe ich diesen Konstruktor und Run-Methode.
public ClientThread(Socket sock, ClientThread[] threads, int count) {
this.clientSocket = sock;
this.threads = threads;
this.count = count;
} // end constructor
public void run() {
ClientThread[] threads = this.threads;
try {
is = new DataInputStream(clientSocket.getInputStream());
os = new DataOutputStream(clientSocket.getOutputStream());
os.writeUTF("Hello client"+count);
System.out.println("Client sent =>"+ is.readUTF());
} catch (IOException e) {
e.printStackTrace();
}
for (int i = 0; i < 2; i++) {
if (threads[i] == this) {
threads[i] = null;
}
}
try {
is.close();
os.close();
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
} // end run method
I einen Server leite und wenn ein Client verbunden wird, erhält der Kunde eine Schnur (zusammen mit count) wird diese ausgedruckt. Jetzt sollte sich auch ein anderer Client verbinden und eine erhöhte Anzahl erhalten. Aber wenn ich meinen Code ausführe, startet der Server, und selbst wenn ich zwei Clients laufen lasse, bekomme ich immer nur 1 als Ausgabe, die gezählt wird, anstatt 1 für den ersten Client und 2 für den zweiten Client. Wohin gehe ich falsch?
Edit: Mein Client ist ein einfacher Socket-Code, der utf liest und utf schreibt. Das ist es.