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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
| void pair()
{
int s = createBindInetSocket(SOCK_DGRAM, 1236) ;
int sTCP = createBindInetSocketTCP(SOCK_STREAM,1236) ;
char c ;
struct sockaddr_in tracker ;
struct hostent * host ;
char nombreBloc[10] ;
int lg=sizeof(struct sockaddr_in) ;
int nbBloc ;
int k ;
struct sockaddr_in * reponse = malloc(sizeof(struct sockaddr_in)) ;
host = gethostbyname("localhost") ; //adresse du serveur qui est en localhost ici
tracker.sin_family = AF_INET ;
tracker.sin_port = htons(1238) ;
memcpy(&tracker.sin_addr, host->h_addr, sizeof(tracker.sin_addr)) ;
if (sendto(s,"info?",strlen("info?"),0, (struct sockaddr *)&tracker, sizeof(tracker))<0)
{
perror("sendto info?");
exit(-2) ;
}
if(recvfrom(s,nombreBloc,10, 0, (struct sockaddr *) &tracker, &lg)<0)
{
perror("Erreur lors de la reception du nombre de blocs\n") ;
}
sscanf(nombreBloc, "%d", &nbBloc) ;
int tab[nbBloc] ;
for(k=0 ; k<nbBloc;k++) // on initialise le tableau : 1 quand le client a le bloc 0 sinon
{
tab[k]=0 ;
}
while(1)
{
int continu=1 ;
for (k=0 ; k<nbBloc && continu ; k++) //recherche du numéro de bloc à télécharger.
{
if (tab[k]==0)
{
continu = 0 ;
char bloc[10] ;
sprintf(bloc, "%d", k) ;
if (sendto(s,bloc,strlen(bloc),0, (struct sockaddr *)&tracker, sizeof(tracker))<0)
{
perror("sendto bloc?");
exit(-2) ;
}
printf("%s\n", inet_ntoa(reponse->sin_addr.s_addr)) ;
if(recvfrom(s,reponse,sizeof(struct sockaddr_in), 0, (struct sockaddr *) &tracker, &lg)<0)
{
perror("Erreur lors de la reception de la réponse") ;
exit(-1) ;
}
printf("%s\n", inet_ntoa(reponse->sin_addr.s_addr)) ;
}
}
//on passe en tcp pour le téléchargement du bloc.
if (connect(sTCP, (struct sockaddr*)&reponse, sizeof (struct sockaddr_in))<0)
{
perror("erreur connect") ;
exit(-1) ;
}
else
{
printf("connect réussi");
}
}
} |