file versenden



  • Lies das File häppchenweise in den Speicher, versende die Häppchen und setze es drüben wieder zusammen.



  • Mir ist gerade noch eingefallen du benutzt wohl besser WinInet. Damit gehts viel einfacher 🙂

    Google: site:msdn.microsoft.com WinInet

    MfG,
    *Ranner*





  • ich leses jetzt in einzelnen stücken aus

    while(gelesen=fread(upload,1,500,tranffile) > 0)
        {
           printf("ANFANG DURCHGANG\n");
           send(sock, upload, strlen(upload), 0);
           printf("\n\n%s <- %d\n\n",upload,strlen(upload)); 
           strcpy(upload,"");
           printf("%s<- upload\n",upload);
        }
    

    aber leider hört fread nicht mehr richtig auf ,es speichert noch einen teil vom anfang des files in den schluss 😞



  • :schland: :schland: :schland: Warum benutzt du strlen? da musst du "gelesen" einsetzen. :schland: :schland: :schland:



  • Benutze:

    button ausprobierer schrieb:

    Google: site:msdn.microsoft.com TransmitFile

    MfG,
    :schland: *Ranner* :schland:



  • :schland: Benutze lieber nicht TransmitFile das funktioniert nicht auf Windows 98 und Linux. :schland:



  • So wie ich das verstanden hab suchst du n Algo, mit dem du ne Datei verschicken kannst.

    Also:

    #include <winsock2.h>
    #include <fstream>
    
    using namespace std;
    
    #define BUFSIZE 1024 // variabel
    
    ... // Das ganze Socket-Zeugs
    
    int iRueckgabe; // Rückgabewert von send(...)
    int iBytes; // Anzahl gesendeter Bytes
    char buf[BUFSIZE];
    char *sendBuf;
    
    ifstream dl("file", ios::binary);
    
    while(!dl.eof())
    {
       memset(buf, '\0', BUFSIZE); // Buffer leeren
       dl.read(buf, BUFSIZE); // Aus Datei lesen
    
       iBytes = 0;
       sendBuf = buf;
    
       do
       {
          // Wird benötigt, falls buf nicht vollständig gesendet wurde.
          sendBuf = buf;
          sendBuf += iBytes; // gesendete Bytes nicht noch einmal senden !
    
          iRueckgabe = send(socket, sendBuf, (BUFSIZE-iBytes), 0);
          if(iRueckgabe == SOCKET_ERROR)
             return -1;
          else if(iRueckgabe != (BUFSIZE-iBytes))
             iBytes += iRueckgabe;
    
       } while(iRueckgabe != (BUFSIZE-iBytes));
    }
    
    dl.close();
    

    Ich weiß, is nicht die schönste Lösugen, aber funktioniert.
    Ich benutz diesen Algo in all meinen Servern.
    Falls es Fragen gibt, sag einfach Bescheid.

    Gruß TheImaginator



  • nöö schrieb:

    :schland: Benutze lieber nicht TransmitFile das funktioniert nicht auf Windows 98 und Linux. :schland:

    Welche Pfeife benutzt heutzutage bitte Windows 98? Ist kein Argument. Und wen interessiert Linux? Richtig, niemanden.

    MfG,
    :schland: *Ranner* :schland:



  • Ranner schrieb:

    nöö schrieb:

    :schland: Benutze lieber nicht TransmitFile das funktioniert nicht auf Windows 98 und Linux. :schland:

    Welche Pfeife benutzt heutzutage bitte Windows 98? Ist kein Argument. Und wen interessiert Linux? Richtig, niemanden.

    MfG,
    :schland: *Ranner* :schland:

    Sorry, aber Leute die heutzutage noch Linux ignorieren, sind meiner Meinung nach "Pfeifen".
    Linux hat Windoof einiges voraus!
    Da wir hier aber in nem WinAPI-Forum sind, empfehle ich dir auch TransmitFile, da du glaub ich kaum Win-98-User mit deinem Programm ansprechen willst, oder?

    Gruß TheImaginator



  • So meinte ich es ja auch 😉

    MfG,
    :schland: *Ranner* :schland:



  • TransmitFile ist auf Client Betriebssystemen eingeschränkt. Es können nur 2 TransmitFile Aufrufe gleichzeitig ausgeführt werden. Also nix für Server die man unter normalem Windows XP ausführen will.


Anmelden zum Antworten