Datenaustausch zwischen 2 Rechnern - API?



  • 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 Puffers
    

    und 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 😃


Anmelden zum Antworten