Dateien senden per TCP

thekiller

Viceinator
Hallo,

ich knobel gerade ein bisschen wie ich Dateien jeglicher Art und beliebiger Größe per TCP verschicken kann. Das Problem dabei ist nicht die Verbindung selbst, dass habe ich alles schon fix und fertig. Ich habe es auch schoneinmal in C programmiert. Zwar nicht elegant aber es hat funktioniert. Nun jetzt habe ich mich rangesetzt es komplett mit C++ mitteln zu programmieren aber irgendwie will dass nicht so wirklich.
Naja ich hätte halt auch gerne ein paar Informationen wie man überhaupt richtig an die Sache rann geht! Was muss ich bedenken um Fehler zu vermeiden? Habt Ihr evtl. gute Beispiele?
Achja und falls es wichtig ist ich verwende die MFC(CSocket) für die Netzwerkverbindung.

Danke schonmal
LG Manu
 
Damit:
Code:
virtual int Send(
   const void* lpBuf,
   int nBufLen,
   int nFlags = 0 
);
?!

Ich verstehs Problem nicht ganz, such dir n Puffer aus ... BYTE * bBuf = new BYTE[1024];
oder so, dann lieste die Datei aus in 1024er blöcken, und haust das per Send ins netz, wenn die Verbindung steht, reagierste über OnReceive (Callback) auf die einkommenden Daten und stückelst sie in braven 1024er blöcken wieder zusammen.

Bei mir sieht das so aus:
Code:
sendFile.Open(this->d_strFileName, CFile::modeRead, NULL);
do
{
	iRead = sendFile.Read(ReadBuf, 1024);
	::_itoa(iRead, pBuf, 10);
	this->Send(pBuf, 4); // übertrage größe des Pakets
	this->Send(ReadBuf, iRead); // übertrage paket
	//Sleep(100); //Debuggingzwecke
} while(iRead > 0);
/e: Achja, was du bedenken solltest: Dein Empfangspuffer leert sich nicht in "Null" zeit, sondern braucht immer Zeit, ebenso gehts deinem Sendepuffer. Standard war AFAIK 8kb, kann mich hier aber auch täuschen.
Hau dir doch gegebenenfalls ne log rein wie oft deine OnReceive aufgerufen wird, (evtl mit paketnummerierung) dann siehste wo fehler auftreten/ ob die kommunikation funktioniert oder ob generell was nicht stimmt - wobei dein Send in dem Fall n Error werfen sollte.
 
Zuletzt bearbeitet: