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
   |  
og=0;
fin=1;
printf("verification des paramètres\n");
ok = GestionParam(argc,argv,&log,fichier);
    if(ok)
	{
	servIP = argv[1];           /* premier argument : adresse ip du serveur */
        PortEcoute = atoi(argv[2]);  /* port spécifié en paramètres */
	}
    else 
	{
	AffichErreur("Utilisation : %s <IP du serveur> [<Port d'utilisation>] <nom_fichier_log (active le log en auto)>\n");
	exit (0);
	}
 
    /* Creation du socket UDP */
    if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
        AffichErreur("creation de socket échouée");
 
    /* Construction de la structure d'adresse pour la communication avec le serveur*/
    memset(&ServAddr, 0, sizeof(ServAddr));    
    ServAddr.sin_family = AF_INET;                 /* famille d'adresse : Internet (les adresses locale fonctionnent aussi */
    ServAddr.sin_addr.s_addr = inet_addr(servIP);  /* Adresse IP du serveur */
    ServAddr.sin_port   = htons(PortEcoute);     /* port utilisé */
/*preparation du log de conversation si il y a besoin*/
if(log==1)
{
fichier=(char *)malloc(sizeof(char)*strlen(argv[3]));
strcpy(fichier,argv[3]);
printf("ouverture du fichier : %s pour log des conversations\n",fichier);
fic=fopen(fichier,"a");
}
 
/*demande du pseudo de l'utilisateur*/
printf("donner votre pseudo :");
scanf("%s",pseudo);
printf("connexion au serveur!\n");
strcpy(EnvoiChaine,"test");
LgChaineEnvoi=strlen(EnvoiChaine);
if (sendto(sock, EnvoiChaine, LgChaineEnvoi, 0, (struct sockaddr *) &ServAddr, sizeof(ServAddr)) != LgChaineEnvoi) AffichErreur("erreur d'envoi au serveur");
strcpy(EnvoiChaine,"");/*ré initialisation de la chaine à envoyer*/
while(fin==1)
	{
	/*traitement de la chaine à envoyer*/
	EnvoiChaine=NULL;
	EnvoiChaine=TraitChaine(EnvoiChaine,pseudo,&LgChaineEnvoi,&fin);
    	if (sendto(sock, EnvoiChaine, LgChaineEnvoi, 0, (struct sockaddr *) &ServAddr, sizeof(ServAddr)) != LgChaineEnvoi) AffichErreur("erreur d'envoi au serveur");
 
	    /* gestion de la réponse */
    	TailleAddr = sizeof(AddrRecept);
    	LgChaineRecue = recvfrom(sock, echoBuffer, ECHOMAX, 0,(struct sockaddr *) &AddrRecept, &TailleAddr);	
	printf("%d",LgChaineRecue);
    	if (ServAddr.sin_addr.s_addr != AddrRecept.sin_addr.s_addr)
    	{
        AffichErreur("Reception de packet d'une source inconnue!!\n");
        exit(1);
    	}
 
 
 
 
    	/* creation manuelle de la fin de chaine de caractères */
    	echoBuffer[LgChaineRecue] = '\0';
    	printf("%s\n", echoBuffer);    /* affichage de la chaine reçue */
	/*lancement de l'écriture dans le fichier si besoin est*/
	if(log==1) GestionLog(fic,echoBuffer);
	}
   if (log==1) fclose(fic);
    close(sock);/*fermeture du socket*/
    exit(0);
} | 
Partager