Datenaustausch zwischen 2 Rechnern - API?
-
Stell dir vor du würdest eine Struktur erstellen. Darin befindet sich der Dateinamen, die größe der anhängenden Daten vielleicht ne Kennung das es von deinem Programm kommt und was weiss ich noch, und ganz am Ende die eigentlichen Daten, das ganze jagste übers netz und ließt das auf der anderen Seite wieder und fertg.
Mal schematisch muß net stimmen
typedef struct SendHeader { char Kennung[5]; char Dateiname[255]; DWORD BinDataSize; }_SendHeader; CFile file; file.open("C:\\Test.exe"); DWORD SendSize = sizeof(_SendHeader)+file.Size(); void *buffer = new BYTE(SendSize); _SendHeader *Send = (_SendHeader *)buffer; strncpy(Send->Kennung,"ABCD\0"); strncpy(Send->Dateiname,file.GetPathName()); Send->BinDataSize = file.Size(); File.Read(buffer[sizeof(_SendHeader)]); SendToNetwork(Buffer,SendSize);Hoffe das is etwas Verständlich.
Gruß Matthias
-
Hallo Matthias,
ja! Ich glaube das hilft mir weiter. Ich setze mich morgen mal dran.
Vielen Dank schon mal!Noch eine Frage:
Was bezweckt die Zeile:File.Read(buffer[sizeof(_SendHeader)]);?
Müsste die letzte Zeile nicht
SendToNetwork(Send,SendSize);lauten?
Grüße
Alex
-
filth schrieb:
Was bezweckt die Zeile:
File.Read(buffer[sizeof(_SendHeader)]);?
Hier werden die Daten aus dem File was Du versenden willst, in den Buffer nach dem erzeugten Header geladen. Da ich davon ausgegangen bin das du eine Datei die auf der Platte is versenden willst, ansonnsten muß Du die zeile tauschen gegen das kopieren eines spiecherbereiches oder was auch immer du da reinschreiben willst.
filth schrieb:
Müsste die letzte Zeile nicht
SendToNetwork(Send,SendSize);lauten?
Die Zeiger Buffer und Send zeigen doch beide auf die selbe Adresse, also is das egal, wobei es vielleicht auch sinn macht den Buffer gleich als Byte-Zeiger beim erzeugen mit new zu deklarieren.
Aber wie gesagt das is alles nur ausn Kopf geschrieben, also so könnte es gehen, im einzelfall sind da sicher noch haufen fehler drin, genauso is keine Fehlerbehandlung dabei. Aber den Teil überlass ich dir.

Gruß Matthias
-
Danke Matthias

-
Hi filth,
könntest du deine Funktion zum Senden, sofern du es hinbekommen hast, posten?
-
Hallo,
muss mich nochmal einklinken.
Das Senden mit der Struktur funktioniert soweit. Ich habe aber noch Probleme, die Datei zu lesen.Wie kann ich entsprechend Speicher bereitstellen, wenn ich die Länge der Datei oder der einzelnen Zeilen nicht kenne?
-
Welches problem hast du mit der Datei lesen, ohne die zu lesen kannste die ja auch nicht verschicken, wobei sich dann die frage stellt für was du dann noch eine Größe brauchst. in meinem Beispiel war doch das laden der Datei mit dabei. oder was passt da nicht, ohne genauere Beschreibung wird dir keiner Helfen können.
Gruß Matthias
-
Hallo Matthias,
ich würde es gerne mit fstream lösen und die Datei zeilenweise einlesen und verschicken.
fstream f; char cstring[1024]; f.open("C:\\test.txt", ios::in); while (!f.eof()) { f.getline(cstring, sizeof(cstring)); strcpy(Send->DataLine, cstring); } f.close();Das Problem hierbei ist die Länge der Zeile - die kann ja auch größer als 1024 Zeichen sein.
...ich glaube allerdings irgendwie verhacke ich mich gerade total...
-
CStdioFile f; CString cstring; f.open("C:\\test.txt",CFile::modeRead); while (f.ReadString(cstring) == TRUE) { strcpy(Send->DataLine, cstring); } f.close();Mein Vorschlag dazu, mir leuchtet zwar nicht ein warum du nicht das ganze file auf einmal liesst, und warum du híer mit char-Puffer rumalberst wenn es dafür CString bzw. andere Klassen gibt, aber vielleicht kannst du mir das ja beantworten.
Ansonnsten fstream hab ich noch nie benutzt, also kann ich dir da auch net helfen.
Gruß Matthias
-
Hallo Matthias,
ich habe Schwierigkeiten die MFC Klassen zu verweden.
Wenn ich die MFC Bibliotheken aktiviere, meckert der Compiler, dass windows.h included wird.
Entferne ich windows.h, bekommt das gl.h Probleme
-
Aber de windows.h brauchste doch, ansonnsten wenn de eh kein MFC benutzt biste sogar im falschen bereich vom Forum (hier dreht sich alles um MFC). Da werden dir hier nur die eingefleichten helfen können, ich auf jeden Fall nicht.
Gruß Matthias
-
filth schrieb:
...
ich würde es gerne mit fstream lösen und die Datei zeilenweise einlesen und verschicken.fstream f; char cstring[1024]; f.open("C:\\test.txt", ios::in); while (!f.eof()) { f.getline(cstring, sizeof(cstring)); strcpy(Send->DataLine, cstring); } f.close();du kannst std::string und getline benutzen
fstream f; std::string cstring; f.open("C:\\test.txt", ios::in); while (!f.eof()) { getline(f,cstring); strcpy(Send->DataLine, cstring.c_str()); } f.close();[/cpp]
-
Mal eine andere Frage, unabhängig von der Einlese-Geschichte:
Auf der Empfängerseite habe ich folgendes:
char buffer[256]; // On the stack int nret = recv(theSocket, buffer, 256, // Complete size of buffer 0);Wie kann ich denn die Buffergröße abhängig von der Größe, der zu empfangender Daten, einstellen? - Gerne auch mit Benutzung von MFC

-
meines wissens gar nicht, da du ja nicht weisst wieviel daten kommen und du holst solange deine Datwen mit recive ab bis keine daten mehr kommen, außerdem wenn das deine Datenübertragung is, haste doch de größe im Header stehen (also in deinem Selbstgebastelten). Dann holste die größe vom Header Daten ab schaust ob alles io is und wieviel du speicher resevieren mußt um die restlichen Daten abzuholen. Oder hab ich mal wieder daneben gegriffen.
Gruß Matthias
-
Theoretisch geht das so, die Größe bekomme ich über den Header. Wie reserviere ich aber praktisch den entsprechenden Speicher?
Meines Wissens muss ja die Arraygröße vor dem Compilieren bekannt sein und kann nicht erst zur Laufzeit angegeben werden?
Gruß
Alex
-
Warum kannst du das nicht während der Laufzeit, schon mal mit new gearbeitet?
also
char *buffer = new char[size]; //Size is die größe des Puffersund schon kannste das während der Laufzeit.
Gruß Matthias
-
Vielen Dank, es scheint zu funktionieren

-
schreibst du alles im stile, es scheint zu funktionieren? *lol*
Gruß Matthias
-
CTecS schrieb:
schreibst du alles im stile, es scheint zu funktionieren? *lol*
Gruß Matthias
Ist ja nur die Dipl Arbeit

-
na da machts ja nix
