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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
| /*connectionless : Serveur
sockets->bind->recvfrom->..->sendto (serveur)*/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
int main(int argv,char **argc)
{
int port_nbr=0,cpt=0,i=0;
char *addr_IP;
char c;
FILE *config;
/**********************************************************************/
//récupération de l'IP et du port
config=fopen("configuration.conf","r");
fscanf(config,"%c",&c);
while(c!='p')
{
cpt++;
fscanf(config,"%c",&c);
}
cpt-=(5+1); //on enlève les caractères non significatifs ("IP : " et "p")
if (cpt<1)
printf("Vérifiez le fichier de configuration");
addr_IP=malloc(sizeof(char)*cpt);
fseek(config,-cpt-2,SEEK_CUR);
while(i<cpt)
{
fscanf(config,"%c",&(addr_IP[i]));
i++;
}
fseek(config,0,SEEK_SET);
fscanf(config,"%c",&c);
while(c!='t')
{
cpt++;
fscanf(config,"%c",&c);
}
fscanf(config," : ");
fscanf(config,"%d",&port_nbr);
fclose(config);
/**********************************************************************/
/**********************************************************************/
//crétaion d'un socket
int sock=socket(AF_INET,SOCK_DGRAM,0);
if (sock<0)
{
printf("\nErreur création socket\n");
fprintf(stderr,"Erreur %d dans socket %s\n",errno,strerror(errno));
if(errno!=EADDRINUSE) exit(errno);
}
else
printf("socket OK\n");
/**********************************************************************/
/**********************************************************************/
//définition des adresse et ports locaux
struct sockaddr_in addr_serv;
addr_serv.sin_family=AF_INET;
(addr_serv.sin_addr).s_addr=inet_addr(addr_IP);
addr_serv.sin_port=port_nbr;
int bindding=bind(sock,(struct sockaddr *)&addr_serv,sizeof(struct sockaddr_in));
if (bindding==-1)
{
printf("\nerreur lors de la définition de l'adresse et du port\n");
fprintf(stderr,"Erreur %d dans socket : '%s'\n",errno,strerror(errno));
if(errno!=EADDRINUSE) exit(errno);
}
else
printf("bind OK");
printf("\nprêt à recevoir ;)\n");
/**********************************************************************/
/**********************************************************************/
//réception des données
char *msg;
int lg_mess=500,lg_rec=0;
msg=malloc(sizeof(char)*lg_mess);
struct sockaddr_in addr_dep;
int taille_addr=sizeof(struct sockaddr_in);
while(1)
{
lg_rec=recvfrom(sock,msg,lg_mess,0,(struct sockaddr *)&addr_dep,&taille_addr);
if (lg_rec==-1)
{
printf("\nerreur lors de la définition de l'adresse et du port\n");
fprintf(stderr,"Erreur %d dans socket : '%s'\n",errno,strerror(errno));
if(errno!=EADDRINUSE) exit(errno);
}
}
printf("%d",lg_rec);
/**********************************************************************/
//Affichage du message
u_long addrDep=(addr_dep.sin_addr).s_addr;
msg[lg_rec]='\0';
printf("De %s port %d : %s\n",(gethostbyaddr((char *)&addrDep,sizeof(addrDep),AF_INET))->h_name,addr_dep.sin_port,msg);
/**********************************************************************/
return 0;
} |
Partager