Statusanzeige bei FileTransfer



  • hi! ich hab ein programm geschrieben das so ziemlich auf diesem code basiert: http://codeguru.earthweb.com/network/FileTransferUsingSockets.shtml

    also man kann von server zu client eine datei übertragen. meine vorstellung ist, dem ganzen noch einen übertragungsstatus zuzufügen. also wieviel prozent der datei übertragen wurden. ich weiß dass es schon postings dieser art gibt, aber darauf scheint niemand zu reagieren.. leider.. hoffe es kennt sich jemand da draußen damit aus.

    na jedenfalls hab ich von einer guten idee gelesen die mein problem zur hälfte löst. und zwar könnte das senderprogramm dem empfängerprogramm vor beginn des dateitransfers die größe der datei mitteilen.und das empfängerprogramm überprüft ständig wie groß die empfangene datei ist.. mit den zwei zahlengrößen kann man dann ganz einfach errechnen wieviel prozent schon übertragen wurden.
    aber es soll auch eine statusanzeige für das senderprogramm geben!
    kann mir da jemand helfen!?

    vielen dank im vorraus!



  • mh,.. kann mir denn jemand sagen wie ich die datei nur teilweise öffne und sende? also z.b. nur ein kilobyte?
    weil dann könnte ich das problem lösen..
    die struktur stell ich mir da vor:

    Beginn der Schleife
      Ein Byte wird gesendet;
      Der angezeigte Prozentsatz wird entsprechend erhöht;
    Ende der Schleife
    

    das ganze so lange bis die file komplett is...

    also wie gesagt.. alles was ich dazu wissen muss ist wie man eine file teilweise öffnet + sendet 🙂 danke für eure hilfe!



  • Ich würde dies so nicht machen, da du nicht sicher sein kannst das alles korrect übertragen wird.

    Der Sendfunktion kannst du übergeben wieviel du senden willst. Die Readfunktion gibt dir die Anzahl der Übertragenen Bytes zurück.
    Was brauchst du noch. Der Source von Codeguru macht nichts anderes als das File Koplett einlesen und dann alles der SEND-Funktion zu übergeben.



  • ja du hast recht.. die idee is nich wirklich gut..

    aber versteh nicht ganz wie du das mit der read funktion meinst.. allgemein hab ich dein posting nicht verstanden... ist die read funktion jetzt die lösung für mein problem? also ohne es zu machen wie ich es in meinem letzten posting gesagt hatte!?
    wäre nett wenn noch ein paar antworten kommen! danke! 🙂



  • CSocket sockSrvr;
    CSocket sockRecv;
    
    AfxSocketInit(NULL);
    sockSrvr.Create(PORT+itemnr,SOCK_STREAM,NULL);
    sockSrvr.Listen(0);
    sockSrvr.Accept(sockRecv);
    sockSrvr.Close();
    
    CString remotesystem;
    UINT laenge;
    sockRecv.GetPeerName(remotesystem,laenge);
    char *pfBuf = new char[5];  / Gegebenenfalls vergroessern
    // "RECEIVE FILESIZE";
    sockRecv.Receive(pfBuf, 5);
    // "FILESIZE RECEIVED";
    int dataLength = atoi(pfBuf);
    delete []pfBuf;
    
    byte* data = new byte[dataLength]; // Muss nicht die größe der Filesize haben
    // Aber mindestens die der Buffersize da hier die gelesenen Daten reinkommen
    
    // Hier jetzt eine Schleife in der du immer 500 Bytes einliest.
    // Vorher eine Buffersize (Hier z.B. 500  in Variable int x) definieren
    // IN der Schleife immer gegenchecken wieviele noch übrig sind
    // Wenn >= 500 dann wieder 500 lesen.
    // Wenn < 500 dann den Rest lesen
    // Nicht vergessen das gelesenen zu speichern.
    sockRecv.Receive(data, x);
    
    // Zum Schluss loeschen
    
    delete []data;
    

    Schau dir bitte die MSDN CSockets an.
    Dort gibt es auch ein Bsp. dafür



  • konnte mir aus zeitgründen weder den code durchlesen noch in die msdn schaun....
    aber sieht alles sehr vielversprechend aus!

    danke! sehr lieb von dir! 🙂


Anmelden zum Antworten