Problem bei der Stringübertragung

Status
Nicht offen für weitere Antworten.

TheNME123

Mitglied
Hallo alle zusammen,

ich habe folgendes Problem:
Für eigenes Netzwerkprotokoll möchte ich gerne Strings für die Befehle nutzen ("GET, LIST, etc"). Ich bin jetzt soweit fertig mit dem Server-Teil den ich schon ausgiebig und ohne Probleme per Telnet getestet habe. Als ich jetzt zum ersten Mal den Client Teil ausprobiert habe der zunächst nur Strings empfangen sollte musste ich erschreckt feststellen das nach jedem Char der eigentlich dort stehen sollte noch ein weiterer hinzukam der da nicht hingehört (in dem Fall das leere Quadrat).

So sollte es aussehen: <ACCEPTED>;
So sieht es aus: (Quadrat)<(Quadrat)A......(Quadrat)>

Ich vermute ein Charset Problem kann mir jedoch noch keinen Reim darauf machen. Hier mal der Code zum senden und empfangen.

Server:
Code:
ByteBuffer writeBuffer = ByteBuffer.allocate(100);
String testMessage = ("<ACCEPTED>;");
for(char ch: testMessage.toCharArray()) {
        writeBuffer.putChar(ch);
}
writeBuffer.flip();
socket.write(writeBuffer);

socket ist in dem Fall ein SocketChannel!

Und der Client:
Code:
ByteBuffer bb = ByteBuffer.allocate(8192);
socket.read(bb);
bb.flip();
Charset charset = Charset.forName("UTF-8");
CharsetDecoder decoder = charset.newDecoder();
CharBuffer charBuffer = decoder.decode(bb);
String result = charBuffer.toString();
System.out.println(result);
message.append(result);

socket ist wieder ein SocketChannel! Ich hab auch bereits statt UTF-8 auch ISO-8859-1 versucht. Ich weiss leider nicht mehr weiter.

Vielen Dank und Grüße

TheNME123[/code]
 
S

SlaterB

Gast
> Für eigenes Netzwerkprotokoll

was benutzt du denn nun zum Übertragen, ganz normale Standardsockets oder eine eigene Implementierung?

wenn Standardsockets: lösche dein gesamtes Programm und benutze ein Standard-Tutorial-Beispiel,
tritt da der Fehler auch auf?
 

TheNME123

Mitglied
Ich benutze den ServerSocketChannel, SocketChannel für die Netzwerkimplementierung da ich auf nicht blockierendes schreiben und lesen angewiesen bin. Ich kann leider nicht für jede Verbindung einen eigenen Thread starten!

Wie bereits gesagt ist die Kommunikation per Telnet mit dem Server ohne weiteres möglich. Die Strings kommen korrekt an etc. Nur wenn die beiden Java Teile miteinander kommunizieren versteht der Client nur Bahnhof obwohl die Implementierung zum String lesen in Server und Client indentisch sind.

Ich weiss aber auch leider nicht genau auf Basis welches Character Encodings das dann abläuft. Java arbeitet mit Unicode aber gilt das auch für die Sockets? Bzw. wie arbeitet Telnet? Auch Telnet muss ja aufgrund irgendeiner Tabelle die Bytes wieder in lesbare Buchstaben zurückwandeln.

Ein wirklich schlechter Workarround wäre natürlich immer das erste von 2 Zeichen zu löschen die ankommen aber das kann ja irgendwie nicht die Lösung sein.

Grüße

TheNME123
 

Murray

Top Contributor
Ich habe es nicht ausprobiert, aber m.E. sollte man die mit putChar in einen ByteBuffer gepackten Characters auch nur mit getChar wieder auslesen. Die Annahme, dass die interne Repräsentation (also die beiden beim putChar in den ByteBuffer geschriebenen Bytes) irgendeinem Encoding entspräche, kann man wohl nicht treffen (ist es nicht auch so, dass das Encoding i.d.R. die 2-Byte-Unicode-Sequenz auf ein Byte abbildet?).

Sollte es nicht reichen, im Client den ByteBuffer mit getChar auszulesen, dabei zeichenweise einen CharBuffer zu füllen und dann mit CharBuffer#toString den String zu holen?
 

TheNME123

Mitglied
Danke Murray das war der entscheidende Tip! Es scheint sich dabei in der Tat nicht um ein richtiges Encoding zu handeln. Im Endeffekt ist die Lösung noch ein bisschen simpler als mit getChar.

Code:
ByteBuffer bb = ByteBuffer.allocate(8192);
socket.read(bb);
bb.flip();
CharBuffer charBuff = bb.asCharBuffer();
String result = charBuff.toString();

Das die Lösung so einfach sein könnte damit hätte ich nicht gerechnet :D

Vielen Dank für die Hilfe und Grüße

TheNME123[/code]
 

TheNME123

Mitglied
Nochmal ein kleines Update. Man kann auch mit einem Charset arbeiten. Java benutzt jedoch nicht Unicode UTF-8 sondern Unicode UTF-16. Dann klappt es auch mit der alten Methode!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Socket Problem mit den WebSocket Antworten der Discord API Netzwerkprogrammierung 0
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
C RMI Produzent-Verbraucher-Problem - Code review Netzwerkprogrammierung 12
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
S Problem bei dem Bluetoothverbindungsaufbau Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
M Netty - TCP Problem Netzwerkprogrammierung 4
L Socket Problem mit Server Netzwerkprogrammierung 1
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
M Socket CDI, Websocket reference Problem ! Netzwerkprogrammierung 2
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
G apache httpClient Problem. Netzwerkprogrammierung 5
H Problem mit ObjectStreams Netzwerkprogrammierung 3
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
D Socket BufferedWriter/Reader Problem Netzwerkprogrammierung 1
Maxim6394 Problem mit Socks5 Implementierung Netzwerkprogrammierung 0
C Handle Connection Problem Netzwerkprogrammierung 3
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
O 4Gewinnt Multiplayer - Netzwerk Problem (TCP) Netzwerkprogrammierung 1
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
G Problem mit einem FileWatcher Netzwerkprogrammierung 7
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
B Client/Server Connection Problem Netzwerkprogrammierung 2
G Problem mit STATIC-Verständnis Netzwerkprogrammierung 8
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
J Facelets Include Rendered Problem Netzwerkprogrammierung 2
J Socket Problem mit C++/Java Netzwerkprogrammierung 20
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 7
B Socket Problem mit Netzwerkchat Netzwerkprogrammierung 21
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
Maxim6394 ipv6 Problem Netzwerkprogrammierung 2
Maxim6394 Proxyserver Performance Problem Netzwerkprogrammierung 11
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 5
B RMI und Problem mit rmic-Tool Netzwerkprogrammierung 3
C FTP storeFileStream Problem Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
D JavaMail - Mailsabrufen Problem (imap) Netzwerkprogrammierung 12
J HTTP Übersetzung yahoo babelfish - Zeichensatz-Problem Netzwerkprogrammierung 6
D Apache CXF, JAX-WS Problem bei Arrays - einfacher Server Netzwerkprogrammierung 2
M Problem beim Datenempfang Netzwerkprogrammierung 2
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
D Thread problem Netzwerkprogrammierung 3
T Servlets JSP: Tomcat Problem Netzwerkprogrammierung 4
K Client - Server Problem Netzwerkprogrammierung 16
T RMI Problem Client-Server Netzwerkprogrammierung 2
P RMI Stub Problem Netzwerkprogrammierung 3
D Socket UDP Übertragungs Problem Netzwerkprogrammierung 7
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
D Problem mit ObjectInputStreams Netzwerkprogrammierung 10
D Socket Problem mit InputStreamReader Netzwerkprogrammierung 3
N CRC32 CheckSum Problem bei UDP Netzwerkprogrammierung 2
V Java Mail Api - IMAP Problem Netzwerkprogrammierung 6
P RMI Problem Netzwerkprogrammierung 4
I Problem bei Outputstreamerzeugung in anderer Klasse als Socket Netzwerkprogrammierung 5
S Socket Problem mit Objektübertragung Netzwerkprogrammierung 16
Shoox Reader / Writer Problem Netzwerkprogrammierung 2
S Problem mit 2 Serversockets unter Win XP Netzwerkprogrammierung 7
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
M RMI - Connection Problem Netzwerkprogrammierung 7
J Socket Client - Server Problem Netzwerkprogrammierung 4
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
T Problem bei Findung der richtigen Architektur Netzwerkprogrammierung 3
AlexSpritze Authentication Problem bei WebServices Netzwerkprogrammierung 4
J Socket Problem -Proxies Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
F Konzept Problem Netzwerkprogrammierung 12
G NIO Sockets Architektur Problem Netzwerkprogrammierung 2
H Neues NIO problem nachricht an alle clients Netzwerkprogrammierung 3
J Client server problem Netzwerkprogrammierung 3
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
W RMI Problem Netzwerkprogrammierung 4
M Problem mit Server Netzwerkprogrammierung 5
N Socket Java server c# client problem Netzwerkprogrammierung 7
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
R RMI Hibernate Problem Netzwerkprogrammierung 4
Z RMI Problem Netzwerkprogrammierung 11
F RMI problem mit RMI Netzwerkprogrammierung 3
H Object Cast Problem nach Übertragung mit Log4j Netzwerkprogrammierung 5
H Log4j SocketAppender Problem Netzwerkprogrammierung 2
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
P Problem mit JOscarLib Netzwerkprogrammierung 6
0din SMTP Client - readline problem Netzwerkprogrammierung 4
C komisches Problem / ObjectInputStream erstellt sich nicht Netzwerkprogrammierung 5
W vista / win server 2003 netzlaufwerk problem Netzwerkprogrammierung 4
W Problem mit HTTP-Dateiübertragung Netzwerkprogrammierung 6
E Problem: netbeans 6.5 und webanwendung Netzwerkprogrammierung 6
C Problem mit Übertragung einer Klasse in RMI Netzwerkprogrammierung 10

Ähnliche Java Themen

Neue Themen


Oben