Allora lato server invio il file:
Quando il file è finito invio una certa stringa (che io ho qui indicato con END_NO_ERROR).codice:char buffer[4096]; DWORD dwRead; /*Invio del nome del file*/ h = FindFirstFile(temp,&fd); if(h == INVALID_HANDLE_VALUE){ /*Se il file indicato non esiste*/ send(s,END_ERROR,5,0); return CONNECTED; } send( s, fd.cFileName, MAX_PATH, 0 ); /*Invio del file*/ h = CreateFile(temp,GENERIC_READ, FILE_SHARE_READ, NULL,OPEN_EXISTING, 0, NULL); if(h != INVALID_HANDLE_VALUE) { dwRead=0; while ( ReadFile(h, buffer, sizeof(buffer), &dwRead, NULL) ) { if ( dwRead > 0 )send(s, buffer, dwRead, 0); else break; } Sleep(2000); send(s,END_NO_ERROR,5,0); } CloseHandle(h);
Lato client lo salvo, questo metodo è chiamato in modo iterativo, ad ogni ricezione del buffer controllo, se la stringa non equivale a END_NO_ERROR allora chiamo il metodo:
Mi spiace tanto che questi metodi sono tirati fuori da un mio programma e quindi possono risultare confusi....spero comunque ti siano di un qualche aiuto.codice:bool download(){ /*Sta ricevendo il file richiesto*/ if(newFile==true){ /*Se è un nuovo file crealo*/ lstrcpy(charbuff,szDir); lstrcat(charbuff,recvbuf); hFile = CreateFile(charbuff,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,NULL); newFile=false; //Il file è stato creato return false; //La creazione del file non deve essere vista come ricezione di byte } /*Scrivi sul file*/ if(WriteFile(hFile,recvbuf,sockByte,&dw,NULL)==0){ wsprintf(charbuff,"Errore in scrittuta numero %i",GetLastError()); return false; } /*Incrementa l'indice del file su cui scrivi*/ else return true; }
![]()

elf90 g77
Rispondi quotando