Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Welche Buffersize ?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.03.2004, 23:10 Uhr
~knopper
Gast


Hallo,

Das ist ein kleines Code fragment:


C++:
#define BUFFERSIZE 1283

char *read_sock(SOCKET s){
    int retval;
    char msg[BUFFERSIZE];

    retval = recv(s,msg,BUFFERSIZE,0 );
....
    return msg;    
}



Wenn ich msg ausgebe, liefert es noch andere komische Zeichen am Ende.
Nun weiss ich nicht wie ich die richtige Grösse von BUFFERSIZE definiere, weil msg nicht jedes mal das gleiche ist.
Ich möchte aber nur die Anzahl retval der bytes ausgeben und den Rest nicht. Wie kann ich das realisieren ?

Danke im voraus.

Dieser Post wurde am 19.03.2004 um 23:11 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.03.2004, 23:15 Uhr
Pablo
Supertux
(Operator)


Das liegt daran, dass du eine Variable zurückgibst, die nach dem Verlassen der read_sock Funktion ihre Gültigkeit verliert.

Versuche so:

Nehmen wir an, es handelt sich um foo(), die die Funktion read_sock aufruft


C++:

#define BUFFERSIZE 1283

char* read_sock(SOCKET s, char* msg, size_t buff_laenge){
    int retval;

    if (msg==NULL) return NULL;

    retval = recv(s,msg, buff_laenge,0 );
....
    return msg;    
}

void foo()
{
    char msg[BUFFERSIZE];
    SOCKET s;
    ....
    read_sock(s, msg, BUFFERSIZE);
}


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 19.03.2004 um 23:16 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.03.2004, 00:20 Uhr
~knopper
Gast


Hallo Pablo,

Ich glaube ich hatte vorher auch so gemacht.
Zur Sicherheit habe den Code wie Du gesagt hast geändert, aber das liefer immer das gleiche.

z.b das hier ist die Ausgabe von read_sock

"
......
quality_good=1
soladdr=224.0.0.2

╠...╠,

total 4081 bytes

"

Ich brauche nur bis 224.0.0.2. Achso das ist unter Windows. dos cmd


Bearbeitung von Pablo:

Ich habe den Rest rausgeschnitten, da es einfach viel zu viel Platz gebraucht hat


Dieser Post wurde am 20.03.2004 um 01:25 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.03.2004, 00:31 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


das sieht mir nach irgendwelchen sonderzeichen aus die übertragen wurden. und jetzt nur in der ausgabe so aussehen. naja wenn du die am ende eh nicht brauchst kannst du doch alles nach der ip einfach "wegschneiden"
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.03.2004, 01:25 Uhr
Pablo
Supertux
(Operator)


Dann liegt es an recv. So wie ich es gepotstet habe, sollte es funktionieren.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.03.2004, 09:16 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi:


C++:
retval = recv(s,msg, buff_laenge,0 );
msg[retval] = '\0';
....
    return msg;    



recv liefert einen unterminierten string zurück! den muss man noch terminieren am ende. (dafür ist der rückgabewert von recv ja da )
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.03.2004, 15:38 Uhr
~knopper
Gast


msg[retval] = '\0';

Ich habe inzwischen auch im Handbuch reingeguckt, es stimmt ja

Danke !
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: