rausfinden wieviel Bytes beim revc() angekommen sind?



  • Hallo,

    wie finde ich heraus, wieviele Bytes beim recv() angekommen sind, so dass ich die größe des buffers bestimmen kann?

    char readbuffer[200];
    recv(ssocket,readbuffer,200,0);
    

    so geht es ja normal.. recv() gibt dann die Byteanzahl zurück.. aber ich wollte char readbuffer[200] auf die Anzahl der Bytes anpassen.. geht das irgendwie???

    Danke!



  • ich würd einfach strlen ausprobieren.



  • nein.. ich wollte es so haben Bsp:

    ...
    
    switch (lParam)
    {
     case FD_READ:
         int length = recvBytesLength(socket);
    
         char* buffer;
         buffer = new char[length]
         recv(socket,buffer,length,0);
    
    ....
    

    die funktion recvBytesLength() gibt es natürlich nicht, aber ist sowas realisierbar?



  • Leute Leute Leute,,,,,

    MSDN LESEN

    Die Funktion recv liefert die Anzahl der empfangenen Bytes zurück denn Sie ist so definiert...

    int recv(SOCKET s,char FAR *buf,int len,int flags);

    Dein Aufruf könnte also heißen
    int iReceived = recv(ssocket,readbuffer,200,0);



  • @DaDaywalker:
    Das war ja wohl ein Griff ins Klo! 🙄 🙄 🙄
    Genau das wollte personenkult eben nicht wissen...



  • Schick die Anzahl der Bytes einfach vorher.



  • genau.. das der dann die Anzahl der empfangenen Bytes anzeigt ist mir klar.. ich hab jetzt diesen code hier:

    int ret=0;
    BYTE *bytestream;
    unsigned long ul_tmp;
    
    ioctlsocket(socket,FIONREAD,&ul_tmp);
    bytestream = new BYTE[ul_tmp];
    
    ret = recv(socket,(char*)bytestream,ul_tmp,0);
    

    wobei ioctlsocket ja auch nicht so toll sein soll..



  • Naja macphistox2002 muss ich nix zu sagen ne ?!!

    Peeking for data in Winsock means that an application requests for the amount of incoming data waiting to be received without actually receiving it. This is a holdover from Winsock 1.1 compatibility with Unix BSD Sockets. In Winsock, this is accomplished with either recv/WSARecv(..., MSG_PEEK) or ioctlsocket(FIONREAD, ...). You should avoid doing this because it is highly inefficient, and it subjects an application to an incorrect data count.


Anmelden zum Antworten