# Verständnisfrage Multi-Threaded Client/Server



## AlexM (28. Mrz 2014)

Hallo leute,
ich beschäftige mich gerade mit der Server/Client Programmierung in Java und habe ein beispiel Quelltext zu dem Thema gefunden.

How To Write A Multi-Threaded Client-Server Communications in Java - Tech Wikipedia

Wenn ich das ganze jedoch ausführe (mit mehr als 1 Client) muss ich feststellen, dass sich immer nur ein Client mit dem Server verbinden kann. Die Clients werden im Quelltext in einem eigenen Thread bearbeitet ... kann mir einer sagen woran das liegt? Ist Code falsch oder führe ich es falsch aus?

Mit freundlichen Grüßen,
Alex M.


----------



## JavaMeister (28. Mrz 2014)

Der von dir verlinkte Quellcode ist nicht so korrekt.

Der Server ist nicht multithreaded.


----------



## AlexM (28. Mrz 2014)

Hi, 
danke für deine antwort. Kannst du vielleicht sagen woran das liegt? Wo der fehler ist?

Mit freundlichen Grüßen,
Alex M


Edit : 

Ich habe die Server klasse bei der while schleife bisschen geändert und es scheint jetzt zu gehen. 


```
while (listening) {
			
			Socket client = serverSocket.accept();
			
			ConnectionRequestHandler c = new ConnectionRequestHandler(client);
			
			Thread t = new Thread(c);
	        t.start();
			
		}
 
		serverSocket.close();
	}
 
	/*private void handleClientRequest(ServerSocket serverSocket) {
		try {
			new ConnectionRequestHandler(serverSocket.accept()).run();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}*/
```

Und es scheint jetzt zu gehen. Kann mir einer sagen ob es so passt?


----------



## JavaMeister (28. Mrz 2014)

Es wird von einer Trhead Klasse geerbt, aber weder die Run Methode überschrieben noch "start()" ausgeführt.

Das Runnable wird zwar implementiert, aber es wird nur "run()" aufgerufen, statt die Runable an ein Thread zu übergeben und darauf dann start() und nicht run auszuführen.


----------



## AlexM (28. Mrz 2014)

Hi,
danke für deine Antwort.
Ich habe meinen Post oben geändert. Kannst du mal drüberschauen?

Mit freundlichen Grüßen
Alex M.


----------



## Highchiller (29. Mrz 2014)

Ja so müsste es passen. Noch mal zu Erklärung:


> Ein Programmierfehler, der Anfängern schnell unterläuft, ist folgender: Statt start() rufen sie aus Versehen run() auf dem Thread auf. Was geschieht? Fast genau das Gleiche wie bei start(), nur mit dem Unterschied, dass die Objektmethode run() nicht parallel zum übrigen Programm abgearbeitet wird. Der aktuelle Thread bearbeitet die run()-Methode sequenziell, bis sie zu Ende ist und die Anweisungen nach dem Aufruf an die Reihe kommen. Der Fehler fällt nicht immer direkt auf, denn die Aktionen in run() finden ja statt – nur eben nicht nebenläufig.


Quelle: Java 7 - Mehr als eine Insel; Abschnitt: Ja, wo laufen sie denn?


----------

