# Daten können nicht sofort empfangen werden



## xasz (16. Mrz 2014)

Hallo Leute,

ich mach grad meine ersten Schritte in der Netzwerkprogrammierung. Prinzipiell funktioniert soweit alles und bin ganz zufrieden. Allerdings habe ich heute etwas festgestellt, was ich nicht ganz verstehe.

Hier mal kurz ein bisschen Code. Ich hab auf dem Server einen Clientaccepter, der auf clients wartet:

```
while(this.isListening){
			Socket client;
			try {
				client = socket.accept();
				server.addClientHandler(new ClientHandler(this.server,client));
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
```

Der Clienthandler holt sich dann im Constructor die Streams:

```
public ClientHandler(NetworkServer gs, Socket socket) throws IOException{
		this.gameServer = gs;
		this.socket = socket;
		this.inputStream = new BufferedInputStream(this.socket.getInputStream());
		this.outputStream = new BufferedOutputStream(this.socket.getOutputStream());
	}
```
Danach wird direkt die listen methode gestartet, die dann auf input wartet.


Meine Client connected wie folgt:


```
public void connect() throws UnknownHostException, IOException {
		this.socket = new Socket(host, serverPort);
		this.inputStream = new BufferedInputStream(this.socket.getInputStream());
		this.outputStream = new BufferedOutputStream(
				this.socket.getOutputStream());
		
		//neue zeile
		this.sendNetworkEvent(new PlayerJoinEvent(this.gameObject.getMyPlayer()));
	}
```

Bisher hatte ich überhaupt keine Probleme und es funktioniert die Netzwerkübertragung.
Jetzt wollte ich gleich zu beginn eine Initialübertragung machen, mit ein paar Infos für einen Spieler im Spiel (Name etc). Das Interessante ist, dass das nie beim Server ankommt.
Wenn ich das selbe Event zu einem späteren Zeitpunkt abschicke z.b. durch einen Button, wird das Event sauber Übertragen, aber nicht hier.

Mein Verdacht ist, dass zu dem Zeitpunkt an dem ich hier versende, der Server noch nicht seine Streams aufgebaut hat, um zu empfangen. 
Mein Problem ist jetzt, dass ich keine Ahnung hab wie ich sicherstellen kann, dass mein Server empfangsbereit ist, bevor ich das abschicke. Oder lieg ich hier ganz falsch.

grüße xasz


----------



## Sen-Mithrarin (16. Mrz 2014)

wow ... hier würde ich erstmal durchgehen und so einiges rausschmeißen ... wie z.b. das ganze unnötige this ... finde den stil persönlich eher sub-optimal ... und nutze this selbst nur an stellen an denen es wirklich nötig ist ... z.b. um eine referenz auf das eigene objekt irgendwas zu übergeben und in konstruktoren bei shadowing ... sonst überhaupt nicht

aber naja .. jedem der eigene stil

zum problem : zu wenig code

was passiert in NetworkServer.addClientHandler(ClientHandler) noch so alles ?
was hat ClientHandler für methoden um auf daten vom client zu reagieren ?
wie sieht der read-loop aus ?
sendest du direkt objekte (über ObjectInput/OutputStream ; RMI) oder zerlegst du die informationen in primes ?
schon mal mit wireshark geguckt ob dein client überhaupt ein paket versendet ?

kurz gesagt : zu wenig infos um helfen zu können


----------

