note: lo Sleep() dell'invio serve solo per i test fatti nella stessa macchina, la "lentezza" delle connessioni internet fa gia da sleep nel caso dell'utilizzo in rete ;)
RICEZIONE:
void ricezione_file(char *sNomefile, SOCKET sockinvio) {
int nBytesP;
char filebuffer[4000];
FILE *file;
file = fopen (sNomefile,"wb");
//ricezione lunchezza file
nBytesP = recv(sockinvio, filebuffer, BUFFERSIZE, 0);
filebuffer[nBytesP] = '\0';
long fSize = atoi(filebuffer);
#ifdef DEBUG_MODE
printf("lunghezza file: %d\n",fSize);
#endif
int nPacchetti = 0;
// for(int x = 0; x <= fSize/512 ;x++){ //scriviamo tutto il file...
while(true){ //scriviamo tutto il file...
nPacchetti++;
strcpy(filebuffer,"");
nBytesP = recv(sockinvio,filebuffer, BUFFERSIZE, 0); //ricezione dati
if (nBytesP == 1 && filebuffer[0]=='a') break;
#ifdef DEBUG_MODE
printf("ricevuti: %d pacchetto n: %d\n",nBytesP,nPacchetti);
#endif
filebuffer[nBytesP] = '\0';
fwrite(filebuffer,1,nBytesP,file);
}
#ifdef DEBUG_MODE
printf("npacchetti rivevuti %d\n",nPacchetti);
#endif
fclose (file);
}
INVIO:
int invio_file(char *sNomefile,SOCKET sockinvio){
//int nBytesP;
char filebuffer[4000];
FILE *file = fopen(sNomefile,"rb");
if (file==NULL) return 0;
fseek (file , 0 , SEEK_END);
long lSize = ftell (file);
rewind (file);
printf("lunghezza file: %d bytes\n",lSize);
// invio della lunghezza del file
SendTo(sockinvio,int_to_char(lSize));
int percentuale = 0;
int percentuale2 = 0;
int byte_di_resto = lSize/512;
Sleep(2000);
for(long x = 0; x <= lSize/512 ; x++) {
Sleep(1);
strcpy(filebuffer,"");
percentuale = x*100/(lSize/512);
if (percentuale != percentuale2) {
printf("%d %% 100\n",percentuale); percentuale2 = percentuale;
}
int nRead = fread( filebuffer, 1, 512, file);
//printf("letti: %d pacchetto: %d\n",nRead,x);
filebuffer[nRead] = '\0';
send(sockinvio, filebuffer,nRead,0);
}
Sleep(2000);
send(sockinvio, "a",1,0); //chiudi ricezione
fclose(file);
#ifdef DEBUG_MODE
printf("numero pacchetti inviati: %d",x);
system("pause");
#endif
return 1;
}
Aggiungi un commento