UDP source
This commit is contained in:
parent
372dd36cae
commit
98bfb60ffc
1 changed files with 84 additions and 3 deletions
87
tsock_v1.c
87
tsock_v1.c
|
@ -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 {
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue