String per ByteBuffer empfangen?

Status
Nicht offen für weitere Antworten.

Angel4585

Bekanntes Mitglied
Hallo,

ich sende via
Code:
socket.getOutputStream().write("Test".getBytes());
Daten an den Server.

Dort hole ich folgendermaßen die Daten ab:
Code:
ByteBuffer b = ByteBuffer.allocate(100);
if(key.isReadable()){
    SocketChannel sc = (SocketChannel)key.channel();
    sc.read(b);
    System.out.println(b.asCharBuffer().toString());
}

Wenn ich einfach nur eine Zahl sende, also:

Code:
socket.getOutputStream().write(1);

Dann bekomm ich die auch und kann sie via:

Code:
ByteBuffer b = ByteBuffer.allocate(1);
if(key.isReadable()){
    SocketChannel sc = (SocketChannel)key.channel();
    sc.read(b);
    System.out.println(b.get(0));
}

auch ausgeben.

Aber wie geht das mit Strings?
Das ganze basiert auf SocketChannels auf der Serverseite und normalen Sockets auf der Clientseite.
Das Problem ist ads die Strings nie ankommen.. da kommt nur ne leere Zeile in der Ausgabe
 

Murray

Top Contributor
1. Wenn du sicher sein willst, dass beim Client wirklich etwas ankommt: nach dem write flush aufrufen
2. Wenn man auf der einen Seite Bytes schreibt, muss man auf der anderen Seite auch Bytes lesen; ich bin mir nicht sicher, ob der CharBuffer die Konvertierung der Unicode-Zeichen intern macht
3. ByteBuffer.asCharBuffer() erzeugt nur eine andere View auf den Buffer, liest aber noch keine Daten, wie das im zweiten Beispiel mit get(0) passiert
 

Angel4585

Bekanntes Mitglied
ok und wie sieht das in Code aus? :D

Es kommen definitiv Daten an, nur werden jetzt zwei "??" ausgegeben, also vermte ich.. hmm.. kA.. irgendwas stimmt halt nicht... wie soll ich das machen mit der Konvertierung?
 
T

tuxedo

Gast
Muss es unbedingt ein ByteBuffer sein? Auch mit NIO kannst du meines wissens einen DataInputStream und DataOutputStream benutzen, mit welchem du prima Strings, Ints und sonstige Sachen durchschicken kannst.

- Alex
 

kopfsalat

Bekanntes Mitglied
Für das Encodieren und Decodieren des Strings in Bytes nutze lieber ein Charset
Code:
Charset charset = Charset.forName("UTF-8");

Dann sende per OutputStream via:
Code:
socket.getOutputStream().write(charset.encode(s).array());

Empfangen geht dann mit:
Code:
String s = charset.decode(b).toString(); // b ist dein Empfangs-ByteBuffer, decode liefert CharBuffer

Ich weiß allerdings nicht, wie sich das verhält, wenn man per OutputStream sendet und per SocketChannel empfängt. Eigentlich solltest du auch über SocketChannel senden, also sowas wie:
Code:
socketChannel.put(charset.encode(s));
 
T

tuxedo

Gast
kopfsalat hat gesagt.:
Ich weiß allerdings nicht, wie sich das verhält, wenn man per OutputStream sendet und per SocketChannel empfängt. Eigentlich solltest du auch über SocketChannel senden, also sowas wie:
Code:
socketChannel.put(charset.encode(s));

Das sollte eigtl egal sein. Ich hab schon von C nach Java mit Socket Daten geschickt und umgekehrt. Socketchannel ist nur die NIO Implementierung der ganzen Socketgeschichte ...
 

Angel4585

Bekanntes Mitglied
alex0801 hat gesagt.:
kopfsalat hat gesagt.:
Ich weiß allerdings nicht, wie sich das verhält, wenn man per OutputStream sendet und per SocketChannel empfängt. Eigentlich solltest du auch über SocketChannel senden, also sowas wie:
Code:
socketChannel.put(charset.encode(s));

Das sollte eigtl egal sein. Ich hab schon von C nach Java mit Socket Daten geschickt und umgekehrt. Socketchannel ist nur die NIO Implementierung der ganzen Socketgeschichte ...

Egal oder nicht.. mit dem Charset funktioniert es, ohne nicht ;)

Danke alex0801 und kopfsalat :D :toll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
T Brauche Hilfe beim GET-String für HttpURLConnection Netzwerkprogrammierung 4
T server empfängt nur 1 Buchstaben vom String Netzwerkprogrammierung 1
N Name eines Attributes aus einem festen String und einer Variablen generieren Netzwerkprogrammierung 5
S Socket String InputStream in hex umwandeln Netzwerkprogrammierung 1
T Socket Gleiche String ungleich? Netzwerkprogrammierung 8
M Socket String Arrays über Socket an Server schicken Netzwerkprogrammierung 2
F String in Datenbank speichern Netzwerkprogrammierung 1
I RMI String Netzwerkprogrammierung 2
precoc String Array versenden Netzwerkprogrammierung 7
T Socket String zu Socket Netzwerkprogrammierung 26
7 String an Server Netzwerkprogrammierung 2
lumo String[] wird zu null bei Serialisierung Netzwerkprogrammierung 8
S WebService, 4-stelliger String (Jahr) als Calendar Netzwerkprogrammierung 5
M String an PHP Script aus Java übergeben Netzwerkprogrammierung 12
N String als byte Array über Socket versenden Netzwerkprogrammierung 8
M Messenger - String oder Objekte Netzwerkprogrammierung 4
T Socket Nullterminierten String lesen Netzwerkprogrammierung 4
J Datei übertragen ja String + datei übertragen nein Netzwerkprogrammierung 5
H String Array durch einen Stream schicken. Netzwerkprogrammierung 4
N Socket Stream in String Netzwerkprogrammierung 4
J Browser-String angeben Netzwerkprogrammierung 5
S String[] über Socket senden Netzwerkprogrammierung 3
F Stream wird als Char übertragen. Char -> in String umwand Netzwerkprogrammierung 5
G String in InetAddres umwandeln klappt nicht Netzwerkprogrammierung 5
ModellbahnerTT Problem feste String ins Netzwerk zu geben Netzwerkprogrammierung 5
G UTF-8 in STring umwandeln oder umgedreht Netzwerkprogrammierung 12
F String in eine URL umwandeln Netzwerkprogrammierung 7
P string over net Netzwerkprogrammierung 4
T Html-Source über URL in einen String speichern? Netzwerkprogrammierung 16
B HEX String zu einem Byte Array ? *verzweiflung* :( Netzwerkprogrammierung 16
K String zurück liefern ! Netzwerkprogrammierung 4
S SSLSocketFactory.createSocket(String hostname, int port),wo? Netzwerkprogrammierung 5
O Ip-String in byte[]-Array umwandeln? Netzwerkprogrammierung 3
C gesendeten String einlesen Netzwerkprogrammierung 3
G String to Socket ? Netzwerkprogrammierung 3
A StringCorruptedException: invalid String header Netzwerkprogrammierung 2
B SocketChannel ByteBuffer Bilder verschicken Netzwerkprogrammierung 17
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
M Eingehender ByteBuffer mit unbestimmter Größe Netzwerkprogrammierung 2
G UDP Packet empfangen funktioniert nicht. Netzwerkprogrammierung 16
H Socket Kann ein Socket server 2 dimensionale Arrays empfangen und versenden? Netzwerkprogrammierung 3
T UDP Pakete empfangen ohne Programm zu blockieren Netzwerkprogrammierung 3
X Daten können nicht sofort empfangen werden Netzwerkprogrammierung 1
S Server - Mehrere Klassen sollen Daten senden und empfangen Netzwerkprogrammierung 25
B Nach Verbindung gleich ObjectStream empfangen Netzwerkprogrammierung 1
S Seltsames Verhalten beim Empfangen von Daten über DataInputStream Netzwerkprogrammierung 12
K Socket Chat-GUI eigenes Event nach Empfangen Netzwerkprogrammierung 2
Z Socket Probleme beim Senden und Empfangen Netzwerkprogrammierung 5
M Gleicher Port für Senden und Empfangen ? Netzwerkprogrammierung 17
T Empfangen klappt Senden nicht - Connection timed out Netzwerkprogrammierung 12
1 Datei senden/empfangen funzt nicht... Netzwerkprogrammierung 5
M Objekt über socket senden/empfangen Netzwerkprogrammierung 3
A Socket DNS Update Pakete empfangen Netzwerkprogrammierung 3
P Server/Client Daten empfangen, wenn Daten gesendet werden Netzwerkprogrammierung 9
B Socket Daten empfangen funktioniert nicht richtig - wo liegt der Fehler? Netzwerkprogrammierung 7
KeNnY_tHe_OwNeR Empfangen geht, Senden nicht ?! Netzwerkprogrammierung 18
B Befehle an Gameserver senden bzw. empfangen Netzwerkprogrammierung 2
M Client/Server Antwort von Server empfangen Netzwerkprogrammierung 6
F Daten senden und empfangen mit Applet Netzwerkprogrammierung 8
I Problem beim empfangen von Daten (Zahlen) Netzwerkprogrammierung 7
H Empfangen von Strings Netzwerkprogrammierung 14
M TCP Socket und Server int senden und empfangen Netzwerkprogrammierung 6
G Probleme mit Firewall beim empfangen von dateien über socket Netzwerkprogrammierung 6
F Datei senden und empfangen Netzwerkprogrammierung 4
D DatagramSocket Empfangen Textarea Netzwerkprogrammierung 2
M Vom Server per Socket Empfangen, aber wieviel Bytes? Netzwerkprogrammierung 11
TRunKX Hilfe beim senden und empfangen Netzwerkprogrammierung 2
D Performance Problem beim File senden, empfangen Netzwerkprogrammierung 4
S senden und empfangen von Objekten? Netzwerkprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben