1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| int transferfile(int desc2, fd_set descripteurs, struct sockaddr_in *client, char* namefile){
int sizeclient = sizeof(*client);
int update = 0;
FILE* file = NULL;
file = fopen(namefile, "rb");
char data[1454] = "";
int currentseq = 0;
char packet[PACKETSIZE] = "";
char numberseqchar[6] = "";
char numberseqfinal[6] = "";
int length = 1;
if (file != NULL)
{
printf("File exists, sending file...\n");
while(feof(file) == 0){
length = fread(data, 1, PACKETSIZE-6, file);
//printf("Retour de fread : %d\n", length);
//printf("data size : %lu\n", strlen(data));
//printf("data content : %s\n", data);
currentseq++;
printf("currentseq : %d\n",currentseq);
charsequence(packet, currentseq, numberseqchar, numberseqfinal);
strcat(packet, data);
sendto(desc2, packet, length+6, 0, (struct sockaddr *) client, sizeclient);
///////////////////// RECEIVE ACK ///////////////
update = checkack(desc2, client, numberseqfinal);
while(!update)
{
sendto(desc2, packet, PACKETSIZE, 0, (struct sockaddr *) client, sizeclient); //Renvoi en cas de perte
update = checkack(desc2, client, numberseqfinal); //Check again ACK
}
/////////////////////////////////////////////////
//memset(numberseqchar, '\0', 6);
memset(numberseqfinal, 0 , 6);
memset(data, 0, PACKETSIZE-6);
memset(packet, 0, PACKETSIZE);
}
sendfin(desc2, client, sizeclient);
}
else
{
printf("File does not exist on the server\n");
exit(-1);
}
return 0;
} |