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");
 
 
		}
 
 
	}	
 
 
 
 
} | 
Partager