# java.nio.channels und Übertragung von ByteBuffer



## HPB (18. Januar 2005)

Hallo,
ich mache zur Zeit meine ersten Gehversuche mit JAVA.NIO und schreibe mir gerade ein kleines Beispiel. In folgendem Quellcode Schnipsel versuche ich eine Nachricht von einem Server zu empfangen und danch eine andere zurück zu schicken.

```
Charset charset = Charset.forName("ISO-8859-1");
		try{
			SocketChannel channel=SocketChannel.open(
					new InetSocketAddress("localhost",BiDirektionaleChannels_S181.PORT));
			ByteBuffer buf= ByteBuffer.allocate(1024);
			channel.read(buf);
			buf.flip();
			CharBuffer cbuf=charset.decode(buf);
			System.out.println("Client: Habe Servernachricht empfangen:\t"+cbuf);
			buf.clear(); 
			buf=charset.encode("Servus Server! Und danke für die Verbindung");
			buf.flip();
			channel.write(buf);
			channel.close();
			System.out.println("Client: Habe Server geantwortet und bin fertig :)");
			buf.rewind(); //spult zum erneuten Lesen zurück
			CharBuffer sentMessage=charset.decode(buf);
			System.out.println("\tNachricht:"+sentMessage);
		} catch (IOException ioe){ioe.printStackTrace();}
```
Allerdings scheint die Zeile buf=charset.encode("Servus Server! Und danke für die Verbindung"); ihre Wirkung zu verfehlen. Der Buffer ist danach leer. Der Server empfängt danach den alten (?) Inhalt. Den kompletten Quellcode findet ihr im Anhang. Bitte entschuldigt den noch etwas unübersichtlichen (und sinnlosen) Code. Ich bin noch am testen


----------



## RedWing (18. Januar 2005)

Hallo,
1.) Solltest du in deiner Serverklasse nicht sentence ausgeben sondern sb.toString()...
2.) Wieso schreibst du deinen Server nicht so wie deinen Client?
Also einfach in den Buffer schreiben, ohne Berücksichtigung auf konvertierungen etc., und
dann im Server den Bytebuffer decodieren (wie im Client).
3.) Solltest du dich in deinem Beispiel um Synchronisation kümmern...

Ich hab den laufenden Quellcode einfach mal hinten angehängt...

Gruß

RedWing


----------

