فهرست منبع

Adaptation server au projet

Arthur Brandao 6 سال پیش
والد
کامیت
54c2a66cee
7فایلهای تغییر یافته به همراه95 افزوده شده و 45 حذف شده
  1. 7 1
      Serveur/error.c
  2. 6 1
      Serveur/error.h
  3. 24 1
      Serveur/main.c
  4. 4 2
      Serveur/makefile
  5. 2 7
      Serveur/server.h
  6. 30 19
      Serveur/server_tcp.c
  7. 22 14
      Serveur/server_udp.c

+ 7 - 1
Serveur/error.c

@@ -19,7 +19,13 @@
 /* --- Extern --- */
 int serrno = 0;
 char* serrlib[] = {
-    "Reussite"
+    "Reussite",
+    "Erreur lors de la creation de la socket",
+    "Erreur lors du bind de la socket",
+    "Erreur lors l'acceptation d'une connexion TCP",
+    "Erreur lors de la reception des données",
+    "Erreur lors de l'envoi des données",
+    "Erreur lors de la fermeture de la socket"
 };
 Error error;
 

+ 6 - 1
Serveur/error.h

@@ -11,7 +11,6 @@
 #include <stdio.h>
 #include <time.h>
 
-
 /* --- Macro --- */
 #define serror(str) fprintf(stderr, str" : %s\n", serrlib[serrno])
 #define strserror(index) serrlib[index]
@@ -26,6 +25,12 @@
 
 /* --- Constantes Erreurs --- */
 #define SENONE 0
+#define SESOCKET 1
+#define SEBIND 2
+#define SEACCEPT 3
+#define SERECEIVE 4
+#define SESEND 5
+#define SECLOSE 6
 
 /* --- Structure --- */
 typedef struct{

+ 24 - 1
Serveur/main.c

@@ -2,6 +2,8 @@
 #include <stdlib.h>
 #include "json.h"
 #include "arraylist.h"
+#include "server.h"
+#include "error.h"
 
 int parse(){
     char str[200];
@@ -111,8 +113,29 @@ int array_list(){
     return 0;
 }
 
+int serv(){
+    char str[BUFFER_SIZE];
+    
+    Server s = server_create_tcp();
+    s->server_bind(s, 8080);
+    s->server_accept(s);
+    s->server_receive(s, str, BUFFER_SIZE);
+    printf("%s\n", str);
+    server_close_client(s);
+    server_close(s);
+    
+    s = server_create_udp();
+    s->server_bind(s, 8080);
+    s->server_receive(s, str, BUFFER_SIZE);
+    printf("%s\n", str);
+    server_close(s);
+    
+    return 0;
+}
+
 int main(){
     //return parse();
     //return encode();
-    return array_list();
+    //return array_list();
+    return serv();
 }

+ 4 - 2
Serveur/makefile

@@ -3,7 +3,7 @@
 #
 
 EXEC = main
-OBJETS = str.o json_parser.o json_encoder.o error.o arraylist.o
+OBJETS = str.o json_parser.o json_encoder.o error.o arraylist.o server_tcp.o server_udp.o
 NOM_PROJET = Porjet Reseau
 
 #
@@ -93,4 +93,6 @@ json_parser.o: json_parser.c json.h str.h constante.h
 json_encoder.o: json_encoder.c json.h str.h constante.h
 error.o: error.c str.h error.h
 arraylist.o: arraylist.c str.h arraylist.h constante.h
-main.o: main.c json.h str.h constante.h
+server_tcp.o: server_tcp.c error.h server.h
+server_udp.o: server_udp.c error.h server.h
+main.o: main.c json.h str.h constante.h arraylist.h

+ 2 - 7
Serveur/server.h

@@ -8,15 +8,10 @@
 #ifndef SERVER_H 
 #define SERVER_H
 
-
 /* --- Include --- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/socket.h>
 #include <sys/types.h>
+#include <sys/socket.h>
 #include <arpa/inet.h>
-#include <unistd.h>
-#include <string.h>
 
 /* --- Constantes --- */
 #define SERV_UDP 1
@@ -42,7 +37,7 @@ struct server{
 /* --- Fonction --- */
 Server server_create_udp();
 Server server_create_tcp();
-void server_close_and_free(Server);
+void server_close(Server);
 void server_close_client(Server);
 
 #endif /* SERVER_H */

+ 30 - 19
Serveur/server_tcp.c

@@ -5,10 +5,17 @@
  * Created on 14 novembre 2018
  */
 
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
 #include "error.h"
 #include "server.h"
 
-/* ---  Fonctions privées --- */
+/* --- Extern --- */
+extern int serrno;
+
+/* --- Fonctions privées --- */
 void server_bind_tcp(Server this, int port) {
     /* Declaration variable */
     int tmp;
@@ -20,14 +27,16 @@ void server_bind_tcp(Server this, int port) {
     tmp = bind(this->socket, (struct sockaddr*) &this->serv, sizeof (struct sockaddr_in));
     if (tmp == ERR) {
         free(this);
-        neterror(BIND_ERROR)
+        serrno = SEBIND;
+        addperror("Impossible de bind la socket");
     }
 
     /* Listen */
     tmp = listen(this->socket, SOMAXCONN);
     if (tmp == ERR) {
         free(this);
-        neterror(BIND_ERROR)
+        serrno = SEBIND;
+        addperror("Impossible d'ecouter");
     }
 }
 
@@ -35,18 +44,20 @@ void server_accept_tcp(Server this) {
     /* Accept */
     this->socket_client = accept(this->socket, NULL, NULL);
     if (this->socket_client == ERR) {
-        free(this);
-        syserror("Erreur lors de la demande de connexion ", 3)
+        serrno = SEACCEPT;
+        addperror("Impossible d'accepter");
     }
 }
 
 ssize_t server_receive_tcp(Server this, char* buf, size_t size) {
     int tmp;
     /* Lecture message */
+    memset(buf, 0, size);
     tmp = read(this->socket_client, buf, size);
     if (tmp == ERR) {
-        free(this);
-        syserror("Erreur lors de la reception ", 3)
+        serrno = SERECEIVE;
+        addperror("Impossible de récupèrer les données");
+        return ERR;
     }
     return tmp;
 }
@@ -56,8 +67,8 @@ void server_send_tcp(Server this, char* msg) {
     /* Envoi message */
     tmp = write(this->socket_client, msg, strlen(msg) * sizeof (char));
     if (tmp == ERR) {
-        free(this);
-        syserror("Erreur lors de l'envoi ", 3)
+        serrno = SESEND;
+        addperror("Impossible d'envoyer les données");
     }
 }
 
@@ -72,7 +83,9 @@ Server server_create_tcp() {
     this->socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
     if (this->socket == ERR) {
         free(this);
-        neterror(SOCKET_ERROR)
+        serrno = SESOCKET;
+        addperror("Impossible de créer la socket");
+        return NULL;
     }
     this->addr = sizeof (struct sockaddr_in);
     memset(&this->serv, 0, sizeof (struct sockaddr_in));
@@ -82,7 +95,9 @@ Server server_create_tcp() {
     tmp = setsockopt(this->socket, SOL_SOCKET, SO_REUSEADDR, &option, sizeof (option));
     if (tmp == -1) {
         free(this);
-        neterror(SOCKET_ERROR)
+        serrno = SESOCKET;
+        addperror("Impossible de modifier les options de la socket");
+        return NULL;
     }
 
     /* Lien fonctions */
@@ -99,18 +114,14 @@ Server server_create_tcp() {
 }
 
 void server_close_client(Server this) {
-    /* Declaration variable */
-    int tmp;
-
     /* Que pour TCP */
     if (this->type != SERV_TCP) {
         return;
     }
-
+    
     /* Ferme */
-    tmp = close(this->socket_client);
-    if (tmp == ERR) {
-        free(this);
-        syserror("Erreur lors de la fermeture de la socket ", 3)
+    if (close(this->socket_client) == ERR) {
+        serrno = SECLOSE;
+        addperror("Impossible de fermer la socket");
     }
 }

+ 22 - 14
Serveur/server_udp.c

@@ -5,9 +5,16 @@
  * Created on 14 novembre 2018
  */
 
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
 #include "error.h"
 #include "server.h"
 
+/* --- Extern --- */
+extern int serrno;
+
 /* --- Fonctions privées --- */
 void server_bind(Server this, int port) {
     /* Declaration variable */
@@ -20,7 +27,8 @@ void server_bind(Server this, int port) {
     tmp = bind(this->socket, (struct sockaddr*) &this->serv, sizeof (struct sockaddr_in));
     if (tmp == ERR) {
         free(this);
-        neterror(BIND_ERROR)
+        serrno = SEBIND;
+        addperror("Impossible de bind la socket");
     }
 }
 
@@ -29,10 +37,12 @@ ssize_t server_receive_udp(Server this, char* buf, size_t size) {
     int tmp;
 
     /* Reception */
+    memset(buf, 0, size);
     tmp = recvfrom(this->socket, buf, size, 0, (struct sockaddr*) &this->client, &this->addr);
     if (tmp == ERR) {
-        free(this);
-        syserror("Erreur lors de la reception ", 3)
+        serrno = SERECEIVE;
+        addperror("Impossible de récupèrer les données");
+        return ERR;
     }
 
     /* Retour */
@@ -47,8 +57,8 @@ void server_send_udp(Server this, char* msg) {
 
     tmp = sendto(this->socket, msg, strlen(msg) * sizeof (char), 0, (struct sockaddr*) &this->client, sizeof (struct sockaddr_in));
     if (tmp == ERR) {
-        free(this);
-        syserror("Erreur lors de l'envoi ", 3)
+        serrno = SESEND;
+        addperror("Impossible d'envoyer les données");
     }
 }
 
@@ -62,7 +72,9 @@ Server server_create_udp() {
     this->socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
     if (this->socket == ERR) {
         free(this);
-        neterror(SOCKET_ERROR)
+        serrno = SESOCKET;
+        addperror("Impossible de créer la socket");
+        return NULL;
     }
     this->addr = sizeof (struct sockaddr_in);
     memset(&this->serv, 0, sizeof (struct sockaddr_in));
@@ -80,15 +92,11 @@ Server server_create_udp() {
     return this;
 }
 
-void server_close_and_free(Server this) {
-    /* Declaration variable */
-    int tmp;
-
+void server_close(Server this) {
     /* Ferme */
-    tmp = close(this->socket);
-    if (tmp == -1) {
-        free(this);
-        syserror("Erreur lors de la fermeture de la socket ", 3)
+    if (close(this->socket) == ERR) {
+        serrno = SECLOSE;
+        addperror("Impossible de fermer la socket");
     }
 
     /* Supprime */