PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Socket]: Datei übertragen



Silver
27-08-2003, 08:10
Hi Leute!

Ich beschäftige mich seit kurzem mit Socket-Programmierung, und habe natürlich die Funktionen send() und recv() kennengelernt. Ok Text zu senden/abrufen ist kein Problem, aber angenommen ich will eine kompilierte Datei übers Netzwerk übertragen, wie macht man dass dann?!? Das muss man ja auch mit send() machen, oder steckt hier mehr Logik dahinter?!?

mfG

elrond
27-08-2003, 08:49
Du kannst binärdateien auch mittels send übertragen. Allerdings mußt du ausschließen, daß dabei im datenstrom steuerzeichen, die für die verwaltung der kommunikation notwendig sind mit übertragen werden.

Wenn du das selbst machen willst könntest du zB. folgendes tun:
1. die einzelnen bytes nehmen und den Ascii-Wert feststellen
2. daraus eine zweistellige hex-zahl machen und übertragen
3. auf der anderen seite die ganze sache umgekehrt und das file wieder zusammenbauen.

Dabei wird zwar die doppelte datenmenge übertragen, aber es funxt sicher.

anda_skoa
27-08-2003, 11:31
Es gibt in einem normalen Datenstrom keine Steuerzeichen.
Das passiert höchstens bei Textstreams, also ganz sicher nicht unter Unix.

Bei binäre Daten musst du halt am Anfang zuerst übertragen, wie lange sie sind, denn du kannst das Ende nicht wie bei einem String an \0 erkennen.

Ciao,
_

elrond
27-08-2003, 12:45
ich habe so etwas bisher nur unter win zu laufen...aktuelle exe-files aus einer db.

Silver
27-08-2003, 20:19
DANKE!
war eigentlich eh logisch, hab ma nur dacht es gibt noch eine elegantere Methode ;) !

mfG

MadB
28-10-2003, 19:09
Moinsen Leute,

ich bastle momentan auch gerade etwas mit socket-Programmierung rum und wollte mich mal an das Versenden einer Datei machen.

Habe viel gesucht, viel gelesen, wieder viel gelesen. Jedoch bekomme ich nix gebacken.

Wie würde es denn beispielweise aussehen, wenn man eine Datei mittels send() verschickt und empfängt?

Weiterhin habe ich was von sendfile() gelesen, jedoch erscheint mir das noch verwirrender.

Grüße

Torsten

Silver
28-10-2003, 19:36
also ist nicht allzu schwer!

Pseudocode:


char buf[MAX]; // buffer erstellen wo die daten der datei reinkommen


// vorher noch datei öffnen mittels open()
while (read(fd, (void*) buf, MAX) > 0) {

send(buf);
}




mfG