Dateien über Netzwerk senden



  • Hallo,

    Wie man das handhabt ist eigentlich (fast) Geschmackssache. Du kannst dir auch eine andere Möglichkeit ausdenken wie du sendest:

    z.b Bild Pixel für Pixel auseinandernehmen und die Position eines jeden abspeichern und dann noch die Farbe.

    class bild{
    int x;
    int y;
    int color;
    };

    Macht man über Sockets.

    MFG winexec*



  • auf

    www.pronix.de
    openbooks
    linux-unix
    netzwerkprog.
    

    wird das für linux ganz gut erklärt...
    wenn du linux benutzt dann guck dir das mal an



  • hab leider nur xp drauf, aber danke soweit, werd mal weiter rumprobieren



  • wenn ich jetzt beispielsweiße ein wallpaper mit 1024x768 pixel versenden will und den binär auslese, wie viel zeichen muss ich da dann circa angeben, wenn ich mit send() arbeite?



  • while(getc(FILE *) != EOF)
                  file_size++;
    

    und schon hast du die groesse



  • Moh schrieb:

    while(getc(FILE *) != EOF)
                  file_size++;
    

    und schon hast du die groesse

    nö, bei Binär-Dateien gibt es afaik kein EOF.

    @Abrow
    über Systemfunktionen findet man raus, wie groß eine Datei ist. Keine Ahnung welche Funktionen das für Windows sind. Bei Unix oder Linux ist es man: stat(2).



  • Hallo,

    Du kannst theoretisch die Filestream benutzen:

    file.seekg(0L,SEEK_END);
    file.tellg();

    MFG winexec*



  • winexec* schrieb:

    Du kannst theoretisch die Filestream benutzen:

    file.seekg(0L,SEEK_END);
    file.tellg();

    Funktioniert bei Binär-Dateien so weit ich weiß auch nicht



  • Hallo,

    Alle Dateien sind binär.

    MFG winexec*



  • also bei mir funktioniert meine methode einwandfrei, ich hab erst letztens einen file-splitter mit dieser methode gebastelt...

    der splitter zerlegt eine originaldatei in mehrere kleine dateien und ein unsplitter kann diese wieder zusammensetzen. und die zusammengesetzte datei entsprach exakt dem original

    edit:

    probier doch mal

    while((c = getc(FILE *)) != EOF)
                  putc(c, FILE*);
    

    mit einer mp3 datei oder einem video. (dass alles binaer geoeffnet werden muss ist klar) es sollte eine exakte kopie machen...


  • Administrator

    also eigentlich sollte dies doch folgendermasen funktionieren:

    FILE* filestream = fopen("Datei.dat", "r");
    if(!filestream)
    { return; }
    
    if(!fseek(filestream, 0, SEEK_END))
    {
        long lsize = ftell(filestream);
    
        if(lsize > 0)
        {
            char* pBuffer = (char*)malloc(lsize);
    
            if(pBuffer)    // Danke Swordfish ^^
            {
                if(!fseek(filestream, 0, SEEK_SET))
                {
    
                    long lcount = fread(pBuffer, sizeof(char), lsize, filestream);
    
                    if(lcount < lsize);
                        // Es gab einen Fehler oder das Ende des Files wurde erreicht. Siehe ferror bzw. feof
    
                    // Daten senden
                }
    
                free(pBuffer);
            }
        }
    }
    
    fclose(filestream);
    

    Oder nicht?
    Denn so hat man ein Array von char Werten, welche er versenden kann. Drüben muss das ganze halt dann nur wieder in der richtigen reihenfolge in ein File geschrieben werden (fwrite).

    Edit:
    Kleine korrektur im Code ...

    Grüssli



  • Dravere schrieb:

    if( !pBuffer )
    

    wohl eher:

    if( pBuffer )
    

    Greetz, Swordfish



  • Moh schrieb:

    while(getc(FILE *) != EOF)
                  file_size++;
    

    und schon hast du die groesse

    Habs jetzt so gemacht, funktioniert einwandfrei, danke 🙂 😉


Anmelden zum Antworten