012
12.02.2007, 20:32 Uhr
~bellacarte
Gast
|
Zitat von FloSoft: |
ich caste die adresse von buffer in einen unsigned long pointer und dereferenziere den danach, d.h ich krieg den inhalt dann als unsigned long - obwohl das & da eigentlich falsch sein dürfte sogar
|
Ok danke.
Allerdings krieg ich es jetzt nicht gebacken, dass wenn ich den Datenstrom empfange diese so wegzuschreiben das die Größe der Datei am Ende mit der Quelldatei identisch ist. (davon abgesehen das sich diese auch nicht öffnen lässt)
beim senden scheint mein fstream jedoch irgendwie das ende der datei nicht zu erkennen. bisher hab ich immer aufgehört zu lesen wenn die anzahl noch zu sendener bytes 0 erreicht hat.
versuche ich das ausschließlich über .eof() .fail() und .bad() läuft alles im endloos loop. kann das mein fehler sein? hier mal meine send methode
C++: |
int CCreateSocket::SendData(SOCKET sendSocket, char* buf, int flags, bool bFile) { char sendBuffer[SND_RCV_BUFFER_SIZE]; unsigned long totalSend = 0; unsigned long sizeOfFile = 0; unsigned long restToBeSend = 9999999; /* Übliche Blöckgröße der zu sendenen Daten */ const unsigned long usualSizeToSend = SND_RCV_BUFFER_SIZE;
/* Größe der zu sendenen Datei ermitteln */ HANDLE hFile; DWORD dwFileSize; wchar_t buf_wide[SND_RCV_BUFFER_SIZE];
MultiByteToWideChar(CP_ACP, 0, buf, strlen(buf)+1, buf_wide, sizeof(buf_wide)/sizeof(buf_wide[0])); hFile = CreateFile(buf_wide, FILE_READ_ATTRIBUTES, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL);
dwFileSize = GetFileSize(hFile, NULL);
/* Von DWORD nach ULONG schieben */ sizeOfFile = dwFileSize;
if(bFile == true) { std::ifstream myFile(buf, std::ios::binary | std::ios::in);
if(myFile.is_open()) { /* Größe der Datei die Empfangen werden soll vorraus schicken */ char * size = (char*) &sizeOfFile;
send(sendSocket, size, sizeof(unsigned long), 0);
/* Prüfen wegen Länge und EOF */ while(!myFile.eof() && !myFile.bad() && !myFile.fail() ) { /*Exakte Anzahl an Bytes senden und nicht volle Buffergröße */ if(restToBeSend > SND_RCV_BUFFER_SIZE) { myFile.read(sendBuffer, usualSizeToSend); totalSend += send(sendSocket, sendBuffer, SND_RCV_BUFFER_SIZE, 0); } else if(restToBeSend > 0) { myFile.read(sendBuffer, restToBeSend); totalSend += send(sendSocket, sendBuffer, restToBeSend, 0); }
std::cout<<sendBuffer<<"\n <BREAK> \n"<<std::endl;
restToBeSend = sizeOfFile - totalSend; } } myFile.close(); }
return totalSend; }
|
|