Schreiben auf einen TCP/IP Socket

dmike

Bekanntes Mitglied
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


Java:
			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
Java:
wr.close();

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


Was mache ich auf der Clientseite falsch?

Danke.
dmike
 
Nichts, mal das ganze neu bauen lassen? Der flush() auf dem BufferedWriter sollte eigentlich die Daten auf den Weg schicken.
 
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:

Java:
	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

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

Neue Themen


Zurück
Oben