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