Commit 351d9caaf7a717b7c774280fdd1cc7ec6f8c3229

Authored by Speedclocker
1 parent 1f9d795a

Ajout de serveur/client TCP

Network/sender
No preview for this file type
@@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
2 #include <sys/socket.h> 2 #include <sys/socket.h>
3 #include <stdio.h> 3 #include <stdio.h>
4 #include <stdlib.h> 4 #include <stdlib.h>
  5 +#include <unistd.h>
5 #include <string.h> 6 #include <string.h>
6 #include <netdb.h> 7 #include <netdb.h>
7 #include <arpa/inet.h> 8 #include <arpa/inet.h>
@@ -13,12 +14,12 @@ int sock_id; @@ -13,12 +14,12 @@ int sock_id;
13 14
14 int initializeSocketUDP(char* service) 15 int initializeSocketUDP(char* service)
15 { 16 {
16 - struct addrinfo precisions, *resultat=NULL, *origine; 17 + 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
17 18
18 memset(&precisions, 0, sizeof precisions); 19 memset(&precisions, 0, sizeof precisions);
19 precisions.ai_family = AF_UNSPEC; 20 precisions.ai_family = AF_UNSPEC;
20 precisions.ai_socktype = SOCK_DGRAM; 21 precisions.ai_socktype = SOCK_DGRAM;
21 - precisions.ai_flags = AI_PASSIVE; 22 + //precisions.ai_flags = AI_PASSIVE;
22 23
23 if(getaddrinfo(NULL, service, &precisions, &origine)<0) { fprintf(stderr, "Erreur getaddrinfo\n"); return(-1); } 24 if(getaddrinfo(NULL, service, &precisions, &origine)<0) { fprintf(stderr, "Erreur getaddrinfo\n"); return(-1); }
24 25
@@ -28,21 +29,26 @@ int initializeSocketUDP(char* service) @@ -28,21 +29,26 @@ int initializeSocketUDP(char* service)
28 { 29 {
29 printf("%d - ", n); 30 printf("%d - ", n);
30 if(i->ai_family==AF_INET) 31 if(i->ai_family==AF_INET)
  32 + {
31 resultat=i; 33 resultat=i;
32 - //printf("Test : %d", origine->ai_addrlen);  
33 - 34 + printf("Test : %d", origine->ai_addrlen);
  35 + }
  36 +
34 printf("\n"); 37 printf("\n");
35 n++; 38 n++;
36 } 39 }
37 - 40 +
  41 + struct sockaddr_in* test=(struct sockaddr_in*)(resultat->ai_addr);
  42 + printf("Addr : %x\n", test->sin_addr.s_addr);
38 if((sock_id=socket(resultat->ai_family, resultat->ai_socktype, resultat->ai_protocol))<0) { fprintf(stderr, "Erreur socket\n"); return(-1); } 43 if((sock_id=socket(resultat->ai_family, resultat->ai_socktype, resultat->ai_protocol))<0) { fprintf(stderr, "Erreur socket\n"); return(-1); }
39 44
40 int val=1; 45 int val=1;
41 46
42 - if(setsockopt(sock_id, SOL_SOCKET, SO_REUSEADDR|SO_DEBUG, &val, sizeof(val))<0) { fprintf(stderr, "Erreur setsockopt\n"); return(-1); }  
43 -  
44 - if(bind(sock_id, resultat->ai_addr, resultat->ai_addrlen)) { fprintf(stderr, "Erreur bind\n"); return(-1); }  
45 - 47 + if(setsockopt(sock_id, SOL_SOCKET, SO_REUSEADDR|SO_BROADCAST, &val, sizeof(val))<0) { fprintf(stderr, "Erreur setsockopt\n"); return(-1); }
  48 +
  49 + if(bind(sock_id, resultat->ai_addr, resultat->ai_addrlen)) { fprintf(stderr, "Erreur bind\n"); return(-1); }
  50 +
  51 +
46 freeaddrinfo(origine); 52 freeaddrinfo(origine);
47 53
48 initialized=1; 54 initialized=1;
@@ -52,41 +58,43 @@ int initializeSocketUDP(char* service) @@ -52,41 +58,43 @@ int initializeSocketUDP(char* service)
52 58
53 int sendUDPBroadcast(char* message, int port) 59 int sendUDPBroadcast(char* message, int port)
54 { 60 {
55 - static struct sockaddr_in* addrUDP;  
56 - addrUDP->sin_family=AF_INET;  
57 - addrUDP->sin_port=(uint16_t)port; 61 + static struct sockaddr_in addrUDP;
  62 + addrUDP.sin_family=AF_INET;
  63 + addrUDP.sin_port=(uint16_t)port;
58 64
59 struct in_addr tmpadd={0xffffffff}; 65 struct in_addr tmpadd={0xffffffff};
60 - addrUDP->sin_addr=tmpadd;  
61 - 66 + addrUDP.sin_addr=tmpadd;
  67 +
62 if(initialized!=1) 68 if(initialized!=1)
63 { 69 {
64 - char* tmp_str; 70 + printf("Initialize via Broadcast\n");
  71 + char tmp_str[15];
65 sprintf(tmp_str, "%d", port); 72 sprintf(tmp_str, "%d", port);
66 initializeSocketUDP( tmp_str ); 73 initializeSocketUDP( tmp_str );
67 } 74 }
68 75
69 - sendto(sock_id, message, sizeof(message), 0, (struct sockaddr*) addrUDP, sizeof(addrUDP)); 76 + if(sendto(sock_id, message, sizeof(message), 0, (struct sockaddr*) &addrUDP, sizeof(addrUDP)) < 0) { fprintf(stderr, "Erreur sendto\n"); return(-1);}
70 } 77 }
71 78
72 int sendUDPUnicast(char* address, char* message, int port) 79 int sendUDPUnicast(char* address, char* message, int port)
73 { 80 {
74 - static struct sockaddr_in* addrUDP;  
75 - addrUDP->sin_family=AF_INET;  
76 - addrUDP->sin_port=(uint16_t)port; 81 + static struct sockaddr_in addrUDP;
  82 + addrUDP.sin_family=AF_INET;
  83 + addrUDP.sin_port=(uint16_t)port;
77 84
78 - inet_aton(address, &(addrUDP->sin_addr)); // Converti l'écriture string de format a.b.c.d en format Internet 85 + inet_aton(address, &(addrUDP.sin_addr)); // Converti l'écriture string de format a.b.c.d en format Internet
79 86
80 87
81 88
82 if(initialized!=1) 89 if(initialized!=1)
83 { 90 {
84 - char* tmp_str; 91 + printf("Initialize via Unicast\n");
  92 + char tmp_str[15];
85 sprintf(tmp_str, "%d", port); 93 sprintf(tmp_str, "%d", port);
86 initializeSocketUDP( tmp_str ); 94 initializeSocketUDP( tmp_str );
87 } 95 }
88 96
89 - sendto(sock_id, message, sizeof(message), 0, (struct sockaddr*) addrUDP, sizeof(addrUDP)); 97 + if(sendto(sock_id, message, sizeof(message), 0, (struct sockaddr*) &addrUDP, sizeof(addrUDP)) < 0 ) { fprintf(stderr, "Error sendto\n"); return(-1); }
90 } 98 }
91 99
92 100
@@ -94,6 +102,8 @@ int sendUDPUnicast(char* address, char* message, int port) @@ -94,6 +102,8 @@ int sendUDPUnicast(char* address, char* message, int port)
94 102
95 int main(void) 103 int main(void)
96 { 104 {
97 - 105 + sendUDPBroadcast("Broadwesh", 2020);
  106 + sendUDPUnicast("255.255.255.255", "Uniwesh", 2020);
98 return(1); 107 return(1);
  108 + close(sock_id);
99 } 109 }
Network/test.c deleted
@@ -1,2 +0,0 @@ @@ -1,2 +0,0 @@
1 -#include <stdio.h>  
2 -  
Sioux/client.c 0 → 100644
@@ -0,0 +1,65 @@ @@ -0,0 +1,65 @@
  1 +#include <sys/types.h>
  2 +#include <sys/socket.h>
  3 +#include <stdio.h>
  4 +#include <stdlib.h>
  5 +#include <unistd.h>
  6 +#include <string.h>
  7 +#include <netdb.h>
  8 +#include <arpa/inet.h>
  9 +
  10 +
  11 +
  12 +int connexionServeur(char* host, char* service)
  13 +{
  14 + int sock_fd;
  15 +
  16 + 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
  17 +
  18 + memset(&precisions, 0, sizeof precisions);
  19 + precisions.ai_family = AF_UNSPEC;
  20 + precisions.ai_socktype = SOCK_STREAM;
  21 +
  22 + if(getaddrinfo(host, service, &precisions, &origine)<0) { fprintf(stderr, "Erreur getaddrinfo\n"); return(-1); }
  23 +
  24 + int n=0;
  25 +
  26 + for(struct addrinfo* i=origine; i!=NULL && resultat==NULL; i=i->ai_next)
  27 + {
  28 + printf("%d - ", n);
  29 + if(i->ai_family==AF_INET)
  30 + {
  31 + resultat=i;
  32 + printf("Test : %d", origine->ai_addrlen);
  33 + }
  34 +
  35 + printf("\n");
  36 + n++;
  37 + }
  38 +
  39 + struct sockaddr_in* test=(struct sockaddr_in*)(resultat->ai_addr);
  40 + printf("Addr : %x\n", test->sin_addr.s_addr);
  41 + if((sock_fd=socket(resultat->ai_family, resultat->ai_socktype, resultat->ai_protocol))<0) { fprintf(stderr, "Erreur socket\n"); return(-1); }
  42 +
  43 + if(connect(sock_fd, resultat->ai_addr, resultat->ai_addrlen) < 0) return(-1);
  44 +
  45 + freeaddrinfo(origine);
  46 +
  47 + return sock_fd;
  48 +}
  49 +
  50 +
  51 +int main(void)
  52 +{
  53 + int sock_fd = connexionServeur("localhost", "2020");
  54 + if(sock_fd<0) { fprintf(stderr, "Erreur connexionServeur\n"); return(-1); }
  55 +
  56 + struct pollfd pipe[2]
  57 + pipe[0].fd = sock_fd;
  58 + pipe[0].events = POLLIN;
  59 + pipe[1].fd = 0;
  60 + pipe[1].events = POLLIN;
  61 +
  62 + return 0;
  63 +}
  64 +
  65 +
Sioux/sioux 0 → 100755
No preview for this file type
Sioux/sioux.c 0 → 100644
@@ -0,0 +1,85 @@ @@ -0,0 +1,85 @@
  1 +#include <sys/types.h>
  2 +#include <sys/socket.h>
  3 +#include <stdio.h>
  4 +#include <stdlib.h>
  5 +#include <unistd.h>
  6 +#include <string.h>
  7 +#include <netdb.h>
  8 +#include <arpa/inet.h>
  9 +
  10 +
  11 +
  12 +int initialisationServeur(char* service)
  13 +{
  14 + int sock_fd;
  15 +
  16 + 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
  17 +
  18 + memset(&precisions, 0, sizeof precisions);
  19 + precisions.ai_family = AF_UNSPEC;
  20 + precisions.ai_socktype = SOCK_STREAM;
  21 + precisions.ai_flags = AI_PASSIVE;
  22 +
  23 + if(getaddrinfo(NULL, service, &precisions, &origine)<0) { fprintf(stderr, "Erreur getaddrinfo\n"); return(-1); }
  24 +
  25 + int n=0;
  26 +
  27 + for(struct addrinfo* i=origine; i!=NULL && resultat==NULL; i=i->ai_next)
  28 + {
  29 + printf("%d - ", n);
  30 + if(i->ai_family==AF_INET)
  31 + {
  32 + resultat=i;
  33 + printf("Test : %d", origine->ai_addrlen);
  34 + }
  35 +
  36 + printf("\n");
  37 + n++;
  38 + }
  39 +
  40 + struct sockaddr_in* test=(struct sockaddr_in*)(resultat->ai_addr);
  41 + printf("Addr : %x\n", test->sin_addr.s_addr);
  42 + if((sock_fd=socket(resultat->ai_family, resultat->ai_socktype, resultat->ai_protocol))<0) { fprintf(stderr, "Erreur socket\n"); return(-1); }
  43 +
  44 + int val=1;
  45 +
  46 + if(setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR|SO_BROADCAST, &val, sizeof(val))<0) { fprintf(stderr, "Erreur setsockopt\n"); return(-1); }
  47 +
  48 +
  49 +
  50 + if(bind(sock_fd, resultat->ai_addr, resultat->ai_addrlen)) { fprintf(stderr, "Erreur bind\n"); return(-1); }
  51 +
  52 + if(listen(sock_fd, 20) < 0) { fprintf(stderr, "Error listen server socket\n"); return (-1); }
  53 +
  54 + freeaddrinfo(origine);
  55 +
  56 + return sock_fd;
  57 +}
  58 +
  59 +void mesCouilles(int sock)
  60 +{
  61 + printf("Connected\n");
  62 +}
  63 +
  64 +int boucleServeur(int socket, void(* fctConnex)(int))
  65 +{
  66 + int sock_dial;
  67 + while(1)
  68 + {
  69 + printf("MAH !\n");
  70 + if((sock_dial=accept(socket, NULL, NULL)) < 0){ fprintf(stderr, "Error accept dialogue\n"); return -1; }
  71 + printf("ACCEPTED\n");
  72 +
  73 + fctConnex(sock_dial);
  74 + }
  75 +}
  76 +
  77 +
  78 +int main(void)
  79 +{
  80 + int sock_fd=initialisationServeur("2020");
  81 + boucleServeur(sock_fd, mesCouilles);
  82 + return 0;
  83 +}
  84 +
  85 +