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 ]
030
10.09.2005, 14:09 Uhr
Michi



ich hab noch ne frage,
wieso sendet man buf+offset?
--
_____________________________________
_____________Open Source_____________
___Das Wissen, gehört der Menschheit____
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
031
10.09.2005, 14:10 Uhr
Spacelord
Hoffnungsloser Fall


Dann caste die Adresse von size halt nach char*.....

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.

Dieser Post wurde am 10.09.2005 um 14:10 Uhr von Spacelord editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
032
10.09.2005, 14:21 Uhr
Spacelord
Hoffnungsloser Fall



Zitat von Michi:
ich hab noch ne frage,
wieso sendet man buf+offset?


Angenommen du möchtest die Zeichenkette "Hallo!" versenden.
Weiter angenommen die Speicheradresse von "Hallo!" liegt bei dezimal 1000.
dann wird beim ersten Durchlauf der Schleife die Adresse 1000+0,und als "Länge" der Daten 7-0 übergeben.
Wenn send jetzt 3 Bytes der Zeichenkette gesendet hat,hat offset anschliessend den Wert 3.Wenn in deinem send Aufruf nur die Adresse von buf stehen würde,würdest du ja beim nächsten Durchlauf die Zeichenkette wieder von vorne senden."Hal" wurde aber ja schon auf den Weg geschickt!!
Da du aber buf+offset übergibst ergibt sich beim nächsten Durchlauf eine Adresse von 1003.
Also wird ab da weiter gesendet wo der letzte send-Aufruf aufgehört hatte.
Mit der "Länge" verhält es sich genauso.Durch size-offset (7-3) werden auch nur noch die restlichen 4Byte übertragen.
Ansonsten würdest du über das "Ende" des Strings hinaus lesen.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
033
10.09.2005, 14:26 Uhr
Michi



Ok,
gut erklärt, dass habe ich verstanden,
aber ich habe jetzt die funktion so wie flosoft gecodet, aber es kommt immer ein fehler beim senden der größe zustande, obwohl ich es mit:
reinterpret_cast<char*>(size)
änder,
wisst ihr da vl noch was?
MFG
Michael
--
_____________________________________
_____________Open Source_____________
___Das Wissen, gehört der Menschheit____
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
034
10.09.2005, 14:29 Uhr
Spacelord
Hoffnungsloser Fall


probier mal:

C++:
reinterpret_cast<char*>(&size);


size ist ein int ....du brauchst die Adresse.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
035
10.09.2005, 14:53 Uhr
Michi



Also,
1. Wenn ich den buf auf 2048 setze, werden immer nur 2 kb übertragen, ist das normal?
2. Die musik kann danach nicht mehr abgespielt werden bez. bei den textdateien stehen nur
Ì Zeichen.

Was soll ich tun?
Is die Datenübertragung wirklcih so schwer


MFG
Michael
--
_____________________________________
_____________Open Source_____________
___Das Wissen, gehört der Menschheit____
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
036
10.09.2005, 15:06 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ok
2048 sind 2kb

Ansonsten musste die dateien zum lesen und schreiben mit dem b-"bit"/binary-mode öffnen, sonst wandelt er dir diverse zeichen falsch um. Ansonsten solltest du nachm recv auch z.b so die var noch terminieren:


C++:
int rd = recv(s, buf+offset, size-offset, 0);
offset += rd;
buf[offset+1] = '\0';


--
class God : public ChuckNorris { };

Dieser Post wurde am 10.09.2005 um 15:06 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
037
10.09.2005, 15:13 Uhr
Michi



Aber kann ich jetzt nur 2 kb verschicken oder wie?
soll ich das terminiern vor dem schreiben machen?
guck mal, wo ich den kompletten code hingeschrieben habe, öffne ich da die datei im b modus?
--
_____________________________________
_____________Open Source_____________
___Das Wissen, gehört der Menschheit____
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
038
10.09.2005, 15:14 Uhr
Spacelord
Hoffnungsloser Fall



C++:
.....
  ifstream datei;
  datei.open("D:\\test.wav", ios::in|ios::binary);
  datei.read(buf, sizeof(buf));
  send(s, buf, sizeof(buf),0);
  printf("Fertig");//Wirklich? Oder ist test.wav nicht doch etwas größer als 2KB?
.....



Du sendest ja auch nur einmalig 2KB!
Die "neue" Schleife zum Senden musst du jetzt noch mit ner äusseren Schleife "verpacken" die buf solange mit Daten füllt wie Daten im ifstream vorhanden sind.
Auf der Empfängerseite dann halt das Gegenstück dazu....

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
039
10.09.2005, 15:17 Uhr
Michi



AH,
jetzt kenn ich den fehler!
Ich habe mal eine Datei die 0kb hat verschickt, er hat aber eine 2kb datei erstellt,
das heißt ja, dass sizeof(buf) nicht die groeße der datei, die verschickt wird speichert, sondern die, die man am anfang an gibt(z.B. 1024)
wie kann ich das denn beheben?
--
_____________________________________
_____________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: