Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Receive bei Socketverbindung

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 ] > 2 <
010
11.02.2007, 14:28 Uhr
~bellacarte
Gast


danke, funktioniert(*hurray*)

Aber ich komme mit deinen Pointeraktionen im Verständnis nicht ganz nach.....

was genau machst du da?

C++:
sizeOfFileToReceive  = *(unsigned long*)&buffer

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
11.02.2007, 14:41 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ich caste die adresse von buffer in einen unsigned long pointer und dereferenziere den danach, d.h ich krieg den inhalt dann als unsigned long - obwohl das & da eigentlich falsch sein dürfte sogar
--
class God : public ChuckNorris { };

Dieser Post wurde am 11.02.2007 um 14:42 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
12.02.2007, 20:32 Uhr
~bellacarte
Gast



Zitat von FloSoft:
ich caste die adresse von buffer in einen unsigned long pointer und dereferenziere den danach, d.h ich krieg den inhalt dann als unsigned long - obwohl das & da eigentlich falsch sein dürfte sogar


Ok danke.

Allerdings krieg ich es jetzt nicht gebacken, dass wenn ich den Datenstrom empfange diese so wegzuschreiben das die Größe der Datei am Ende mit der Quelldatei identisch ist. (davon abgesehen das sich diese auch nicht öffnen lässt)

beim senden scheint mein fstream jedoch irgendwie das ende der datei nicht zu erkennen. bisher hab ich immer aufgehört zu lesen wenn die anzahl noch zu sendener bytes 0 erreicht hat.

versuche ich das ausschließlich über .eof() .fail() und .bad() läuft alles im endloos loop. kann das mein fehler sein? hier mal meine send methode

C++:
int CCreateSocket::SendData(SOCKET sendSocket, char* buf, int flags, bool bFile)
{
    char sendBuffer[SND_RCV_BUFFER_SIZE];
    unsigned long totalSend = 0;
    unsigned long sizeOfFile = 0;
    unsigned long restToBeSend = 9999999;
    /* Übliche Blöckgröße der zu sendenen Daten */
    const unsigned long usualSizeToSend = SND_RCV_BUFFER_SIZE;

    /* Größe der zu sendenen Datei ermitteln */
    HANDLE    hFile;
    DWORD    dwFileSize;
    wchar_t    buf_wide[SND_RCV_BUFFER_SIZE];

    MultiByteToWideChar(CP_ACP, 0, buf, strlen(buf)+1, buf_wide, sizeof(buf_wide)/sizeof(buf_wide[0]));
    
    hFile = CreateFile(buf_wide, FILE_READ_ATTRIBUTES, 0, NULL, OPEN_EXISTING,
                        FILE_ATTRIBUTE_READONLY, NULL);

    dwFileSize = GetFileSize(hFile, NULL);

    /* Von DWORD nach ULONG schieben */
    sizeOfFile = dwFileSize;

    if(bFile == true)
    {
        std::ifstream myFile(buf, std::ios::binary | std::ios::in);

        if(myFile.is_open())
        {
        
            /* Größe der Datei die Empfangen werden soll vorraus schicken */
            char * size = (char*) &sizeOfFile;

            send(sendSocket, size, sizeof(unsigned long), 0);

            /* Prüfen wegen Länge und EOF */
            while(!myFile.eof() && !myFile.bad() && !myFile.fail() )
            {
                /*Exakte Anzahl an Bytes senden und nicht volle Buffergröße */
                if(restToBeSend > SND_RCV_BUFFER_SIZE)
                {
                    myFile.read(sendBuffer, usualSizeToSend);
                    totalSend += send(sendSocket, sendBuffer, SND_RCV_BUFFER_SIZE, 0);
                }
                else if(restToBeSend > 0)
                {
                    myFile.read(sendBuffer, restToBeSend);
                    totalSend += send(sendSocket, sendBuffer, restToBeSend, 0);
                }

                std::cout<<sendBuffer<<"\n <BREAK> \n"<<std::endl;

                restToBeSend = sizeOfFile - totalSend;
            }
        }
        
        myFile.close();
    }

    return totalSend;
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (WinAPI, Konsole) ]  


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: