Hallo,
ich schreibe unter C in Linux an einem Programm, welches ein UDP Paket mit folgendem Buffer verschickt:
---code--- char buffer[]="\x5b\x04\x90\x00\x85\x01\r\n"; byte=send(sock,buffer,strlen(buffer),0); ---code--- Nun wird aber alles, was nach \x90 kommt nicht mitversandt. Es werden also nur die ersten 3 Byte verschickt. \x00 terminiert als Nullbyte mein Paket. (?) Was kann ich tuen damit dies nicht mehr geschieht? Wie kann ich den Buffer komplett verschicken?
Danke für eure Hilfe, freundlich grüßend, Martin
Am 01. Juni 2003 schrieb Martin Weissbach:
---code--- char buffer[]="\x5b\x04\x90\x00\x85\x01\r\n"; byte=send(sock,buffer,strlen(buffer),0); ---code---
Nun wird aber alles, was nach \x90 kommt nicht mitversandt. Es werden also nur die ersten 3 Byte verschickt. \x00 terminiert als Nullbyte mein Paket. (?)
Das glaube ich nicht. Kannst du mal einen minimalen Quelltext schicken, der dein Problem reproduziert?
Torsten
am Sun, dem 01.06.2003, um 2:18:11 +0200 mailte Torsten Werner folgendes:
Am 01. Juni 2003 schrieb Martin Weissbach:
---code--- char buffer[]="\x5b\x04\x90\x00\x85\x01\r\n"; byte=send(sock,buffer,strlen(buffer),0); ---code---
Nun wird aber alles, was nach \x90 kommt nicht mitversandt. Es werden also nur die ersten 3 Byte verschickt. \x00 terminiert als Nullbyte mein Paket. (?)
Das glaube ich nicht. Kannst du mal einen minimalen Quelltext schicken, der dein Problem reproduziert?
,----[ doch laut man-page ] | STRLEN(3) Linux Programmer's Manual STRLEN(3) | | NAME | strlen - calculate the length of a string | | SYNOPSIS | #include <string.h> | | size_t strlen(const char *s); | | DESCRIPTION | The strlen() function calculates the length of the string s, not | including the terminating `\0' charac ter. `----
Ich bin allerdings kein C-Guru, um eine andere Lösung bieten zu können.
Andreas
Am 01. Juni 2003 schrieb Andreas Kretschmer:
,----[ doch laut man-page ] | STRLEN(3) Linux Programmer's Manual STRLEN(3)
Ups, da hatte ich wohl sizeof statt strlen gelesen...
Torsten
On Sunday 01 June 2003 02:07, Martin Weissbach wrote:
ich schreibe unter C in Linux an einem Programm, welches ein UDP Paket mit folgendem Buffer verschickt:
---code--- char buffer[]="\x5b\x04\x90\x00\x85\x01\r\n"; byte=send(sock,buffer,strlen(buffer),0); ---code---
send() ist ok. strlen() nicht, es terminiert beim \0-Byte.
Josef
On Sun, 1 Jun 2003 07:58:00 +0200 Josef Spillner josef@ggzgamingzone.org wrote:
send() ist ok. strlen() nicht, es terminiert beim \0-Byte.
Oki...so weit so gut, ich habe es jetzt folgendermaßen gemacht:
---snip---- int start_routing() { int byte; char buffer[]="\x5b\x04\x90\x00\x85\x01"; byte=send(sock,buffer,sizeof(buffer),0); if (byte == -1) { perror("start_routing() failed!" ); exit(EXIT_FAILURE); } return 0; } ---snip---
Statt strlen habe ich sizeof verwendet den Carriage Return und den Line Feed habe ich weggelassen. Mit ethereal habe ich mir wieder die Pakete angesehen. Jetzt terminiert er zwar nicht mehr bei \x90, aber er hängt ein Nullbyte an das Ende des Buffers. Das versaut mir aber das ganze . Das Programm soll eigentlich die Router Funktion unserer Eumex Anlage steueren. Ich habe dazu unter Windows mit Hilfe von tcpdump bzw. Ethereal mit mal angesehen, was die Anlage verschickt wenn ich den Router starte, bzw. ihn "abschalte". Dabei ist heraus gekommen, das wenn die Anlage die Routing Funktion starten soll, ein UDP Paket verschickt wird, was im DATA Teil des Packets eben den oben genannten Buffer enthält.
Hat noch jemand Ideen? Ich wäre sehr dankbar, MfG Martin
On Sun, Jun 01, 2003 at 10:15:07AM +0200, Martin Weissbach wrote:
On Sun, 1 Jun 2003 07:58:00 +0200
Hi Martin,
Statt strlen habe ich sizeof verwendet den Carriage Return und den Line Feed habe ich weggelassen. Mit ethereal habe ich mir wieder die Pakete angesehen. Jetzt terminiert er zwar nicht mehr bei \x90, aber er hängt ein Nullbyte an das Ende des Buffers. Das versaut mir aber das ganze .
sizeof() liefert bei char* immer Anzahl-der-Zeichen + 1 zurück.
sizeof(buffer) - 1 als 3. Argument sollte also funktionieren
Ciao, Tobias
On Sun, 1 Jun 2003 10:43:09 +0200 Tobias Koenig tokoe@kde.org wrote:
sizeof(buffer) - 1 als 3. Argument sollte also funktionieren
Danke! Manchmal sieht man den Wald vor Bäumen nicht.... Ich hatte mittlerweile den Buffer auf 6 Bytes begrenzt, so ist es natürlich noch schöner... :)
Besten Danke für eure Hilfe, MfG Martin
lug-dd@mailman.schlittermann.de