diff --git a/Network/sender b/Network/sender index eb70193..7418fbf 100755 Binary files a/Network/sender and b/Network/sender differ diff --git a/Network/sender.c b/Network/sender.c index a97107b..662f512 100644 --- a/Network/sender.c +++ b/Network/sender.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -13,12 +14,12 @@ int sock_id; int initializeSocketUDP(char* service) { - struct addrinfo precisions, *resultat=NULL, *origine; + struct addrinfo precisions, *resultat=NULL, *origine; // On stocke dans précisions nos besoins pour le socket, dans resultat l'adresse qui respectera les reqêtes memset(&precisions, 0, sizeof precisions); precisions.ai_family = AF_UNSPEC; precisions.ai_socktype = SOCK_DGRAM; - precisions.ai_flags = AI_PASSIVE; + //precisions.ai_flags = AI_PASSIVE; if(getaddrinfo(NULL, service, &precisions, &origine)<0) { fprintf(stderr, "Erreur getaddrinfo\n"); return(-1); } @@ -28,21 +29,26 @@ int initializeSocketUDP(char* service) { printf("%d - ", n); if(i->ai_family==AF_INET) + { resultat=i; - //printf("Test : %d", origine->ai_addrlen); - + printf("Test : %d", origine->ai_addrlen); + } + printf("\n"); n++; } - + + struct sockaddr_in* test=(struct sockaddr_in*)(resultat->ai_addr); + printf("Addr : %x\n", test->sin_addr.s_addr); if((sock_id=socket(resultat->ai_family, resultat->ai_socktype, resultat->ai_protocol))<0) { fprintf(stderr, "Erreur socket\n"); return(-1); } int val=1; - if(setsockopt(sock_id, SOL_SOCKET, SO_REUSEADDR|SO_DEBUG, &val, sizeof(val))<0) { fprintf(stderr, "Erreur setsockopt\n"); return(-1); } - - if(bind(sock_id, resultat->ai_addr, resultat->ai_addrlen)) { fprintf(stderr, "Erreur bind\n"); return(-1); } - + if(setsockopt(sock_id, SOL_SOCKET, SO_REUSEADDR|SO_BROADCAST, &val, sizeof(val))<0) { fprintf(stderr, "Erreur setsockopt\n"); return(-1); } + + if(bind(sock_id, resultat->ai_addr, resultat->ai_addrlen)) { fprintf(stderr, "Erreur bind\n"); return(-1); } + + freeaddrinfo(origine); initialized=1; @@ -52,41 +58,43 @@ int initializeSocketUDP(char* service) int sendUDPBroadcast(char* message, int port) { - static struct sockaddr_in* addrUDP; - addrUDP->sin_family=AF_INET; - addrUDP->sin_port=(uint16_t)port; + static struct sockaddr_in addrUDP; + addrUDP.sin_family=AF_INET; + addrUDP.sin_port=(uint16_t)port; struct in_addr tmpadd={0xffffffff}; - addrUDP->sin_addr=tmpadd; - + addrUDP.sin_addr=tmpadd; + if(initialized!=1) { - char* tmp_str; + printf("Initialize via Broadcast\n"); + char tmp_str[15]; sprintf(tmp_str, "%d", port); initializeSocketUDP( tmp_str ); } - sendto(sock_id, message, sizeof(message), 0, (struct sockaddr*) addrUDP, sizeof(addrUDP)); + if(sendto(sock_id, message, sizeof(message), 0, (struct sockaddr*) &addrUDP, sizeof(addrUDP)) < 0) { fprintf(stderr, "Erreur sendto\n"); return(-1);} } int sendUDPUnicast(char* address, char* message, int port) { - static struct sockaddr_in* addrUDP; - addrUDP->sin_family=AF_INET; - addrUDP->sin_port=(uint16_t)port; + static struct sockaddr_in addrUDP; + addrUDP.sin_family=AF_INET; + addrUDP.sin_port=(uint16_t)port; - inet_aton(address, &(addrUDP->sin_addr)); // Converti l'écriture string de format a.b.c.d en format Internet + inet_aton(address, &(addrUDP.sin_addr)); // Converti l'écriture string de format a.b.c.d en format Internet if(initialized!=1) { - char* tmp_str; + printf("Initialize via Unicast\n"); + char tmp_str[15]; sprintf(tmp_str, "%d", port); initializeSocketUDP( tmp_str ); } - sendto(sock_id, message, sizeof(message), 0, (struct sockaddr*) addrUDP, sizeof(addrUDP)); + if(sendto(sock_id, message, sizeof(message), 0, (struct sockaddr*) &addrUDP, sizeof(addrUDP)) < 0 ) { fprintf(stderr, "Error sendto\n"); return(-1); } } @@ -94,6 +102,8 @@ int sendUDPUnicast(char* address, char* message, int port) int main(void) { - + sendUDPBroadcast("Broadwesh", 2020); + sendUDPUnicast("255.255.255.255", "Uniwesh", 2020); return(1); + close(sock_id); } diff --git a/Network/test.c b/Network/test.c deleted file mode 100644 index 10b222c..0000000 --- a/Network/test.c +++ /dev/null @@ -1,2 +0,0 @@ -#include - diff --git a/Sioux/client.c b/Sioux/client.c new file mode 100644 index 0000000..8a895fd --- /dev/null +++ b/Sioux/client.c @@ -0,0 +1,65 @@ +#include +#include +#include +#include +#include +#include +#include +#include + + + +int connexionServeur(char* host, char* service) +{ + int sock_fd; + + struct addrinfo precisions, *resultat=NULL, *origine; // On stocke dans précisions nos besoins pour le socket, dans resultat l'adresse qui respectera les requêtes + + memset(&precisions, 0, sizeof precisions); + precisions.ai_family = AF_UNSPEC; + precisions.ai_socktype = SOCK_STREAM; + + if(getaddrinfo(host, service, &precisions, &origine)<0) { fprintf(stderr, "Erreur getaddrinfo\n"); return(-1); } + + int n=0; + + for(struct addrinfo* i=origine; i!=NULL && resultat==NULL; i=i->ai_next) + { + printf("%d - ", n); + if(i->ai_family==AF_INET) + { + resultat=i; + printf("Test : %d", origine->ai_addrlen); + } + + printf("\n"); + n++; + } + + struct sockaddr_in* test=(struct sockaddr_in*)(resultat->ai_addr); + printf("Addr : %x\n", test->sin_addr.s_addr); + if((sock_fd=socket(resultat->ai_family, resultat->ai_socktype, resultat->ai_protocol))<0) { fprintf(stderr, "Erreur socket\n"); return(-1); } + + if(connect(sock_fd, resultat->ai_addr, resultat->ai_addrlen) < 0) return(-1); + + freeaddrinfo(origine); + + return sock_fd; +} + + +int main(void) +{ + int sock_fd = connexionServeur("localhost", "2020"); + if(sock_fd<0) { fprintf(stderr, "Erreur connexionServeur\n"); return(-1); } + + struct pollfd pipe[2] + pipe[0].fd = sock_fd; + pipe[0].events = POLLIN; + pipe[1].fd = 0; + pipe[1].events = POLLIN; + + return 0; +} + + diff --git a/Sioux/sioux b/Sioux/sioux new file mode 100755 index 0000000..52d2d4d Binary files /dev/null and b/Sioux/sioux differ diff --git a/Sioux/sioux.c b/Sioux/sioux.c new file mode 100644 index 0000000..682145e --- /dev/null +++ b/Sioux/sioux.c @@ -0,0 +1,85 @@ +#include +#include +#include +#include +#include +#include +#include +#include + + + +int initialisationServeur(char* service) +{ + int sock_fd; + + struct addrinfo precisions, *resultat=NULL, *origine; // On stocke dans précisions nos besoins pour le socket, dans resultat l'adresse qui respectera les reqêtes + + memset(&precisions, 0, sizeof precisions); + precisions.ai_family = AF_UNSPEC; + precisions.ai_socktype = SOCK_STREAM; + precisions.ai_flags = AI_PASSIVE; + + if(getaddrinfo(NULL, service, &precisions, &origine)<0) { fprintf(stderr, "Erreur getaddrinfo\n"); return(-1); } + + int n=0; + + for(struct addrinfo* i=origine; i!=NULL && resultat==NULL; i=i->ai_next) + { + printf("%d - ", n); + if(i->ai_family==AF_INET) + { + resultat=i; + printf("Test : %d", origine->ai_addrlen); + } + + printf("\n"); + n++; + } + + struct sockaddr_in* test=(struct sockaddr_in*)(resultat->ai_addr); + printf("Addr : %x\n", test->sin_addr.s_addr); + if((sock_fd=socket(resultat->ai_family, resultat->ai_socktype, resultat->ai_protocol))<0) { fprintf(stderr, "Erreur socket\n"); return(-1); } + + int val=1; + + if(setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR|SO_BROADCAST, &val, sizeof(val))<0) { fprintf(stderr, "Erreur setsockopt\n"); return(-1); } + + + + if(bind(sock_fd, resultat->ai_addr, resultat->ai_addrlen)) { fprintf(stderr, "Erreur bind\n"); return(-1); } + + if(listen(sock_fd, 20) < 0) { fprintf(stderr, "Error listen server socket\n"); return (-1); } + + freeaddrinfo(origine); + + return sock_fd; +} + +void mesCouilles(int sock) +{ + printf("Connected\n"); +} + +int boucleServeur(int socket, void(* fctConnex)(int)) +{ + int sock_dial; + while(1) + { + printf("MAH !\n"); + if((sock_dial=accept(socket, NULL, NULL)) < 0){ fprintf(stderr, "Error accept dialogue\n"); return -1; } + printf("ACCEPTED\n"); + + fctConnex(sock_dial); + } +} + + +int main(void) +{ + int sock_fd=initialisationServeur("2020"); + boucleServeur(sock_fd, mesCouilles); + return 0; +} + + -- libgit2 0.21.2