Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Dateien Senden

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ] [ 5 ]
010
22.08.2005, 07:32 Uhr
Michi



Ok,
Was ist eigentlich Base64?

Gut ok, ich lese die datei im binären modus ein, sende das an den server, und der scheichert das in buf und dann? wie speicher ich dass dann als *.mp3 auf dem PC?
Und wie kann ich denn das lösen, dass nicht alles auf einmal geschickt wird?
Danke für eure Mühe
MFG
Michi
--
_____________________________________
_____________Open Source_____________
___Das Wissen, gehört der Menschheit____
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
22.08.2005, 07:55 Uhr
Skippy



also was base 64 bedeutet kannst du hier noch nachlesen http://de.wikipedia.org/wiki/Base_64

zusammengefasst macht es folgendes im pc ist kann jedes byte 1 von 256 möglichkeiten darstellen bei base 64 wird das umgewandelt das man mit 64 möglichkeiten auskommt
daher der text enthält keine sonderzeichen

schau dir die funktion von mir nochmal an die speichert das ganz normal

funktionsweise der übertragung:

server sendet dateinamen /Verzeichnis/musik.mp3
client ruft funktion mit parameter dateiname auf ReceiveFiles(/Verzeichnis/musik.mp3)
server sendet 512byte(je nach puffer größe)
client empfängt 512byte und speichert diese ab
.
.
das ganze noch ein paar mal
.
server sendet 317byte(der rest)
client empfängt 317byte speichert diese ab
server schließt den socket da keine daten zum senden
client beendet schleife da null bytes angekommen sind
client schließt datei und kehrt zu hauptprogramm zurück



das wars deine datei ist abgespeichert

hoffe du meinst nicht was ich denke wenn du zufällig auf die sache beim normalen webserver anspielst das er z.b. bestimmte bruchstücke einer datei sendet na dann gut nacht dann darfst du nämlich erst mal prüfen was für ein header kommt usw

wenn du aber darauf anspielst das ne datei größer als der puffer (sendepuffer) ist ist das für die funktion kein problem
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
22.08.2005, 08:33 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ansonsten sollte man evtl auch noch die größe der Datei mitsenden, dann gibts keine probleme wenn seltsamerweise mehr bytes ankommen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
22.08.2005, 13:55 Uhr
Michi



Gut ok,
Jetzt hab ich es verstanden!
Danke
Was würde denn das für ein Unterschied machen, wenn man das mit Base64 machen würde?
Egal,
nochmal vielen dank für die Antworten
MFG
michi
--
_____________________________________
_____________Open Source_____________
___Das Wissen, gehört der Menschheit____
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
22.08.2005, 14:09 Uhr
Skippy



fast gar keinen man muss nur zwischen

buffer aus datei lesen und buffer senden ne funktion einfügen die einen pointer auf buffer als parameter erhält und die daten codiert

da gibts viele fertige beispiele im netz zu obwohl ich persönlich der meinung bin daten in base 64 zu codieren nur sinnvoll ist wenn man bei einem chat sowas nachrüsten will für echtes dateiversenden find ichs nicht so geeignet da du auf beiden seiten ne höhere prozessorlast erzeugst obwohl dir die umwandlung nichts bringt und wenn ich jetzt nichts falsches erzähle sind daten die base64codiert sind ein klein wenig größer

ich wäre ja eher dafür meine funktion noch zu erweitern so das die daten komprimiert sind z.b. gzip dann hast du nämlich weniger bandbreite die eine datei zum versenden brauch
aber ist halt nur ne idee
vorallem da mein programm ws ich schreibe nen webserver ist lohnt sich das da schon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
22.08.2005, 15:44 Uhr
Michi



Is ja eh immer besser, wenn die dateien kleiner sind...
wenn ich z.B. eine *.mp3 datei sende, muss ich ja auf dem anderen computer eine leere *.mp3 erzeugen, in der er sie reinspeichert. Kann ich das auch mit c++ machen? Also eine leere .mp3 Datei erzeugen?
MFG
Michael
--
_____________________________________
_____________Open Source_____________
___Das Wissen, gehört der Menschheit____
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
22.08.2005, 16:36 Uhr
Skippy



ja wenn du in meiner funktion das
( das war in meiner funktion falsch
resource = fopen(filename, "rb");

durch

resource = fopen(filename, "wb");
oder
resource = fopen(filename, "wb+");
ersetzt dan erzeugt die wenn die datei nicht existiert eine neue
aber glaube "wb" war es was du einsetzen musst
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
22.08.2005, 20:30 Uhr
Michi



Es lässt sich komplimieren
aber beim aufrufen erstellt er die datei, aber der aber hat nie inhalt
Wenn ihr vielleicht im internet mal ein Beispiel findet
Ich habs nicht befunden
MFG
MIchael
--
_____________________________________
_____________Open Source_____________
___Das Wissen, gehört der Menschheit____
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
23.08.2005, 14:03 Uhr
Skippy



was hastn übrigens genommen fopen hatte jedenfalls nochmal nachgesehen
die zeile muss bei dir so aussehen


resource = fopen(filename, "wb");




wenn du die funktion von mir nutzt mach doch mal bitte folgendes


C++:
void Socket::ReceiveFiles(const char *filename)
{
FILE *resource = NULL;
char buf[1024];
int sizeRead;

resource = fopen(filename, "wb");
if (resource == NULL)
{
printf ( "not_found: %s", filename );
}
else
{

while(sizeRead=recv(s_, buf, sizeof(buf), 0) >0)
{



füge an dieser stelle folgende zeile ein
aber achtung wenn dort binärdaten ankommen piepst es bei der ausgabe laufend also sende lieber textdateien

printf ( "not_found: %s", buf );


C++:
fwrite( buf,sizeRead, 1, resource);
}
}
fclose(resource);
}

Dieser Post wurde am 23.08.2005 um 14:03 Uhr von Skippy editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
23.08.2005, 14:26 Uhr
Michi



Ach ja,
Ich habe das void Socket::SendFiles()
mit int SendFiles() ersetzt, ändert der was?
weil dass andere nicht funzt
--
_____________________________________
_____________Open Source_____________
___Das Wissen, gehört der Menschheit____
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ] [ 5 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: