Hallo,
ich habe ein sehr merkwürdiges Problem bei der Socketprogrammierung. Wollte mal hören, ob vielleicht einer von euch auch schon einmal so ein Problem hatte.
Scheinbar werden nicht alle Zeichen die vom Server gesendet werden.
Ein Beispiel:
Wenn ich an den Server das Kommando help übertrage wird folgendes an den Client gesendet:
der Befehl send sieht so aus:
Die Daten werden wie gesagt auch richtig übertragen. Mein Client wartet solange auf Daten bis er eine bestimmte Zeichenkette empfängt (deshalb am Ende .sendEndSequence). Bei meinem Client kommen die Daten aber nur so an:
Ab und zu wird also das führende - verschluckt. Dies ist aber meistens jedes mal ein anderes. Mit Hilfe von Ethereal habe ich jetzt herausgefunden, dass dies immer dann passiert, wenn zwei Reihen direkt in einem TCP Packet versendet werden:
Die Nutzdaten fangen jeweils ab 0036 an.
Dies ist eine richtige Übertragung:
Dies ist eine falsche Übertragung:
Im letzten sieht man, dass zwei Zeilen in einem Packet übertragen wurden.
In meinem Clientprogramm wird dann das Leerzeichen und der erste - vor list abgeschnitten.
Wäre für jeden Tipp dankbar wie man dieses Problem beseitigen könnte.
Vielen Dank
Andreas
ich habe ein sehr merkwürdiges Problem bei der Socketprogrammierung. Wollte mal hören, ob vielleicht einer von euch auch schon einmal so ein Problem hatte.
Scheinbar werden nicht alle Zeichen die vom Server gesendet werden.
Ein Beispiel:
Wenn ich an den Server das Kommando help übertrage wird folgendes an den Client gesendet:
C++:
conn.send("\n");
conn.send(" --- Universal File Transfer Tool (UFTT) ---\n");
conn.send(" --- - - - - - - - - - - - - - - - - - - ---\n");
conn.send(" --- List of available commands: ---\n");
conn.send(" --- list - list specified directory ---\n");
conn.send(" --- shdw - shutdown server ---\n");
conn.send(" --- ---\n");
conn.send(" --- ---\n");
conn.send(" --- help - show this screen ;) ---\n");
conn.send(" --- - - - - - - - - - - - - - - - - - - ---\n");
conn.sendEndSequence();
der Befehl send sieht so aus:
C++:
int CTCP::send(char *string) {
this->rc = ::send(this->sockConnected, string, strlen(string)+1, NULL);
return rc;
}
Die Daten werden wie gesagt auch richtig übertragen. Mein Client wartet solange auf Daten bis er eine bestimmte Zeichenkette empfängt (deshalb am Ende .sendEndSequence). Bei meinem Client kommen die Daten aber nur so an:
Code:
--- Universal File Transfer Tool (UFTT) ---
--- for EDAS ---
--- - - - - - - - - - - - - - - - - - - ---
-- List of available commands: ---
--- list - list specified directory ---
--- shdw - shutdown server ---
--- ---
--- ---
-- help - show this screen ;) ---
--- - - - - - - - - - - - - - - - - - - ---
Ab und zu wird also das führende - verschluckt. Dies ist aber meistens jedes mal ein anderes. Mit Hilfe von Ethereal habe ich jetzt herausgefunden, dass dies immer dann passiert, wenn zwei Reihen direkt in einem TCP Packet versendet werden:
Die Nutzdaten fangen jeweils ab 0036 an.
Dies ist eine richtige Übertragung:
Code:
0000 00 11 6b 36 31 c2 00 c0 52 00 66 25 08 00 45 00 ..k61...R.f%..E.
0010 00 56 65 e9 40 00 80 06 11 59 c0 a8 01 0a c0 a8 .Ve.@....Y......
0020 01 05 15 be 0b 66 05 c4 41 c0 93 a4 3e 21 50 18 .....f..A...>!P.
0030 7f d7 b7 fd 00 00 20 2d 2d 2d 20 55 6e 69 76 65 ...... --- Unive
0040 72 73 61 6c 20 46 69 6c 65 20 54 72 61 6e 73 66 rsal File Transf
0050 65 72 20 54 6f 6f 6c 20 28 55 46 54 54 29 20 2d er Tool (UFTT) -
0060 2d 2d 0a 00 --..
Dies ist eine falsche Übertragung:
Code:
0000 00 11 6b 36 31 c2 00 c0 52 00 66 25 08 00 45 00 ..k61...R.f%..E.
0010 00 84 6b e9 40 00 80 06 0b 2b c0 a8 01 0a c0 a8 ..k.@....+......
0020 01 05 15 be 0b 66 05 c4 42 4a 93 a4 3e 21 50 18 .....f..BJ..>!P.
0030 7f d7 ab d8 00 00 20 2d 2d 2d 20 4c 69 73 74 20 ...... --- List
0040 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 63 6f 6d of available com
0050 6d 61 6e 64 73 3a 20 20 20 20 20 20 20 20 20 2d mands: -
0060 2d 2d 0a 00 20 2d 2d 2d 20 6c 69 73 74 20 2d 20 --.. --- list -
0070 6c 69 73 74 20 73 70 65 63 69 66 69 65 64 20 64 list specified d
0080 69 72 65 63 74 6f 72 79 20 20 20 20 20 2d 2d 2d irectory ---
0090 0a 00 ..
Im letzten sieht man, dass zwei Zeilen in einem Packet übertragen wurden.
In meinem Clientprogramm wird dann das Leerzeichen und der erste - vor list abgeschnitten.
Wäre für jeden Tipp dankbar wie man dieses Problem beseitigen könnte.
Vielen Dank
Andreas
Zuletzt bearbeitet von einem Moderator: