UDP source

This commit is contained in:
Lacau Clement 2024-03-01 16:11:19 +01:00
parent 372dd36cae
commit 98bfb60ffc

View file

@ -17,15 +17,33 @@ données du réseau */
#include <stdio.h>
/* pour la gestion des erreurs */
#include <errno.h>
#define BASE_SIZE 10
void main (int argc, char **argv)
void construire_message(char *message, char motif, int lg) {
int i;
for (i=0;i<lg;i++) message[i] = motif;
}
void afficher_message(char *message, int lg) {
int i;
printf("message construit : ");
for (i=0;i<lg;i++){
printf("%c", message[i]);
printf("\n");
}
}
int main (int argc, char **argv)
{
int c;
extern char *optarg;
extern int optind;
int nb_message = -1; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */
int source = -1 ; /* 0=puits, 1=source */
while ((c = getopt(argc, argv, "pn:s")) != -1) {
int udp=0; /* 0=TCP, 1=UDP */
while ((c = getopt(argc, argv, "pn:su")) != -1) {
switch (c) {
case 'p':
if (source == 1) {
@ -47,19 +65,36 @@ void main (int argc, char **argv)
nb_message = atoi(optarg);
break;
case 'u':
udp=1;
break;
default:
printf("usage: cmd [-p|-s][-n ##]\n");
break;
}
}
char* nom_machine_distante;
// Recuperation du port
int port=atoi(argv[argc-1]);
port = htons(port);
char* message = malloc(BASE_SIZE * sizeof(char));
if (source == -1) {
printf("usage: cmd [-p|-s][-n ##]\n");
exit(1) ;
}
if (source == 1)
if (source == 1) {
printf("on est dans le source\n");
//Recuperation du nom logique
nom_machine_distante=argv[argc-2];
}
else
printf("on est dans le puits\n");
@ -76,5 +111,51 @@ void main (int argc, char **argv)
printf("nb de tampons à envoyer = infini\n");
}
if (udp==1){
if (source==1) {
// Creation du socket local
int sock= socket(AF_INET,SOCK_DGRAM,0);
// Creation de l'adresse du socket distant
struct hostent *hp ;
struct sockaddr_in adr_dest;
int longueur_adr_dest = sizeof(adr_dest);
int longueur_message = BASE_SIZE;
memset((char *)& adr_dest, 0, sizeof(adr_dest)) ;
adr_dest.sin_family=AF_INET;
adr_dest.sin_port=port;
if ((hp = gethostbyname(nom_machine_distante)) == NULL) {
printf("erreur gethostbyname\n") ;
exit(1) ;
}
memcpy( (char*)&(adr_dest.sin_addr.s_addr),
hp->h_addr,
hp->h_length ) ;
// Construction du message
construire_message(message, 'a', BASE_SIZE);
// Envoi du message
sendto(sock,message,longueur_message,0,(struct sockaddr*)&adr_dest,longueur_adr_dest);
exit(0);
}
else {
}
}
}