Dateien über Sockets (TCP) senden



  • Hi,
    wie würdet ihr verschiedene Dateien(.exe,.txt,.ini,.zip,usw) Dateien über Sockets(Windows/Linux) senden??Auch von Win zu Linux oder Win zu Win oder Linux zu Linux. Jenachdem... Würdet ihr jede Datei Binär einlesen in einem char Array Speichern und diese dann in einer Schleife senden und auf der anderen Seite wieder zusammen frickeln??
    Oder gibt es eine Funktion dafür?

    Wäre cool, wenn ihr eure Ideen posten könntet.



  • Ich hab das so realisiert:

    SEND
    -datei binär öffnen
    -zeichenweise in puffer lesen, bis EOF
    -1024 byte puffer verschicken
    -evtl. restbytes verschicken

    RECV
    -datei binär öffnen
    -zeichenweise empfangen und schreiben

    Das gibts auf
    http://www.hard-code.de/main/ccorner/cprogs/kerm1t.txt
    ein GUI für Windows hab ich auch geschrieben, das ist allerdings
    noch sehr umständlich zu bedienen.

    Ob die Übertragung von Linux zu Linux, von Windows zu Linux oder von Windows zu Windows läuft,
    ist egal, denn der Bytestream wird von der OS spezifischen Anwendung
    empfangen.
    Probleme kann es geben, wenn du zwischen big-endian und little-endian
    Prozessorarchitekturen übertragen willst. Die Funktionen dazu stellt
    aber ANSI C (oder POSIX C 😕 ) bereit.

    WAS GIBT ES DENN SONST NOCH FÜR MÖGLICHKEITEN? ODER WELCHE
    NACHTEILE HAT MEIN CODE?

    b4sh0r



  • hm so hab ich mir das ja auch ungefähr gedacht...
    doch ich sehe in deinem code das du das ganze in einer Schleife sendest(Sicherlich ok) Doch ich hatte letztens das Problem, das ich beim Server in einer "for" Schleife einen String bzw. mehrere Strings zum Client gesendet habe. Beim Client habe ich eine "while(1)" Schleife zum Empfangen genutzt. Sprich eine Endlos Schleife. Doch ich hatte das Problem das nicht alle Daten angekommen sind. Bzw meist nur die ersten beiden Strings und dann nichts mehr. Danach habe ich beim Server ein "usleep(100*1000);" eingefügt und damit hab ich dann die Daten vollständig übertragen. Also frage ich mich jetzt. Klappt das reibungslos??

    Und wenn ja: warum??


Anmelden zum Antworten