Client:
fp = fopen("nome", "ab"); // TODO PROBLEMA CON FOPEN
if(fp){
int len = 0;
// Ciclo Bufferizzazione file
do{
// Ricezione lunghezza
if(recv(sk, (void *) &len, sizeof(int), 0) < 0){
printf("ERROR: recv(), %s\n",strerror( errno ));
exit(-1);
}
printf("%d\n",len);
// Ricezione Dato
if(recv(sk, (void *) buffer, len , 0) <0){
printf("ERROR: recv(), %s\n",strerror( errno ));
exit(-1);
}
fwrite(&buffer, 1 , len, fp);
}while(len == sizeof(buffer));
}
fclose(fp);
Server:
FILE *fp;
fp = fopen(path, "rb");
if(fp){
stat(path, &info);
int size = info.st_size;
int length;
// Ciclo bufferizzazione
int count =0;
while(size > 0){
length = fread(&buffer, 1, sizeof(buffer), fp);
size-=length;
// Invio lunghezza buffer
if(send(rctab.cl_sk[index], (void *) &length, sizeof(int), 0) < 0){
printf("ERROR: send(), %s\n",strerror( errno ));
exit(0);
}
printf ("%d c: %d\n",length,count);
count++;
// Invio dato
if(send(rctab.cl_sk[index], (void *) &buffer, length ,0) < 0){
printf("ERROR: send(), %s\n",strerror( errno ));
exit(0);
}
}
}
fclose(fp);
Risultato scritto dalla printf(len) del client:
1024
1024
1024
1024
1024
1024
1024
1024
1024
1024
1024
1024
1024
1024
1024
1024
1024
1024
1024
1024
1024
1024
1024
1024
695943323
mentre l'invio rimane sempre 1024 per il numero giusto di volte.
p.s. per l'uscita dal ciclo c'e' un modo sicuramente migliore ma per adesso ho utilizzato questo per far presto
spero sia di aiuto