# Schreiben auf einen TCP/IP Socket



## dmike (31. Dez 2009)

Hi, und noch ein Frage....


Ich hab in einem junit Testcase einen "Server" gestartet (Thread der lokal auf Port 4321 hört).
Wenn ich den auf der Konsole mit telnet ansprechen klappt die Kommunikation.

Problem ich will den Server auch in JUnit ansprechen. Connecten geht, aber das Schreiben auf den Socket läuft noch nicht 



```
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
	        wr.write(message);
	        wr.newLine();
	        wr.flush();
```

Der Server bekommt von der Nachricht "message" nichts mit.

Ich hab festgestellt, dass "message" erst dann auf dem Server ankommt, wenn ich am Ende noch  

```
wr.close();
```

sage. Was natürlich witzlos ist, weil der Socket dadurch mit geschlossen wird.


Was mache ich auf der Clientseite falsch?

Danke.
dmike


----------



## HoaX (31. Dez 2009)

Nichts, mal das ganze neu bauen lassen? Der flush() auf dem BufferedWriter sollte eigentlich die Daten auf den Weg schicken.


----------



## dmike (31. Dez 2009)

Da waren mal wieder linefeed und carriage return dran schuld uzw. serverseitig .

println clientseitig und readline serverseitig funktionieren nämlich nur dann zusammen, wenn client und server entweder beide windows oder unix systeme sind.

Sobald man es mit beiden zu tun hat, hilft nur das: 


```
private String getMessage(Socket connection) throws IOException {
		BufferedReader in = getReader(connection);
//		String msg= in.readLine();
//		return msg;

		StringBuilder message = new StringBuilder(160);
		char[] buffer = new char[200];
		boolean waitForInput = true;

		while (waitForInput) {
			// blockiert bis Nachricht empfangen
			int chars = in.read(buffer, 0, 200);
			for (int i = 0; i < chars; i++) {
				char c = buffer[i];
				if (waitForInput = (c != nl && c!= '\n') ) {
					message.append(c);
					System.out.println("<"+(int)c+"> : "+message);
				}
			}
		}
		return message.toString();
	}
```

wobei


```
private static final int nl = (System.getProperty("line.separator").getBytes())[0];
```


----------

