TCP/IP Socket: Byte Codierung

Gast #1228993
Lesenswert?

Hallo

Ich habe ein Problem, das mir das Leben ziemlich schwer macht.

Ich habe einen kleinen TCP/IP-Client, der mir einfach ein Byte-Array mit 
wahllosen Byte-Werten an einen Server senden soll.

Das klappt auch soweit super, nur die Codierung stimmt nicht.

Ein Beispiel:

Ich sende:   08 09 1A 5B 80
Es kommt an: 08 09 1A 5B 3F

Beim letzten Byte liegt ein Codierungsfehler vor, aus 08 wird 3F. Kann 
ich auch bei Wireshark beobachten.


Wie kann ich die Codierung so umstellen, dass es passt?
Gast #1229003
Lesenswert?

Wieso, funktioniert doch alles.

Du wolltest wahllose Werte, und bekommst sie auch!

SCNR ;-)

Oder meintest Du zahllose Werte? :-D

Hmm, wahrscheinlich doch quallose ...

Ok, eins sieht man aber: 0x80 ist (bis auf ein Bit, und zwar das Bit in 
0x40) ein invertiertes 0x3F. Vielleicht hilft ja das irgendwie.
Gast #1229015
Lesenswert?

Entschuldigung, habe eben auch festgestellt, dass der Hilferuf 
ziemlicher Murks war. Ich machs besser:


Ich will von meinem C#-Client irgendwelche Bytefolgen an einen Server 
schicken. Die Länge der Daten ist vorerst egal, ebenso ihr Inhalt.

Nun habe ich eben beobachtet, dass es beim Senden der Daten prinzipiell 
keine Probleme gibt, außer beim 0x80 (evtl. noch bei anderen, bin noch 
nicht alle 255 Möglichkeiten durchgegangen). Werte wie 0x49 oder 0xFF 
lassen sich dagegen problemlos übertragen.

Dass zwischen 0x80 und 0x3F ein gewisser Zusammenhang besteht fiel mir 
auch auf, der Dreher wird ja auch sicher nicht ohne Grund geschehen.

Ich hatte so ein Ähnliches Problem mal beim Übertragen von Daten über 
die serielle Schnittstelle. Damals habe ich mit:

SerialPort.System.Text.Encoding.GetEncoding(28591);

die Coderierung umgestellt. Allerdings scheint es diese Möglichkeit beim 
TCP/IP socket nicht zu geben.

Codes:

1. Initialisierung des Client-Socket
1
        IPHostEntry hostInfo = Dns.GetHostByName(Address);
2
        //System.Net.IPEndPoint ep = new System.Net.IPEndPoint(IPAddress.Parse(Address),port);
3
        System.Net.IPEndPoint ep = new System.Net.IPEndPoint(hostInfo.AddressList[0],port);
4
        socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );
5
        socket.Connect(ep);

2. Senden von Daten
1
string text = "\x49" + "\x80" + "\xff" + "\xff";
2

3
client.send(System.Text.Encoding.Default.GetBytes(text));
4
         
5
//...
6

7
return socket.Send(data);

Mit System.Text.Encoding.Default.GetBytes(text)) kann ich den string 
zwar Codieren, die zur Verfügung stehenden Codierungsmöglichkeiten lösen 
aber nicht mein Problem, das der best case aller Codierungen noch eben 
der mit dem 0x80->0x3F Problem darstellt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren