Bonjour, je viens de terminer mes applications (une app client et une app serveur) Ca compile et fonctionne parfaitement (sauf preuve du contraire )

J'aimerai avoir des commentaires sur le code, des choses à modifier dans le but de le rendre plus stable.

J'aimerai aussi avoir des "idées" sous forme de pseudo code style :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
si truc = 0
boucle
affiche("s");
tant que x=1
Dans le but de réaliser un petit logiciel de conversation par ip (client/serveur) et là je vois flou, c'est le brouillard.

Je dois partir en cours, je vais réfléchir sur le chemin à la façon de mettre en oeuvre un tel programme (gestion des boucles...)

code serveur

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
/*
  Name: MySock
 Email: <a href="mailto:samyhocine@hotmail.fr">samyhocine_at_hotmail.fr</a>
 Website: <a href="http://www.samsoft.ift.fr" target="_blank">samsoft.ift.fr</a>
  Copyright: Gpl v2
  Author: Samy Hocine
  Date: 07/10/07 18:14
  Description: Partie serveur
*/
#include <stdio.h>
#include <stdlib.h>
#ifdef __cplusplus
#error Be sure you are using a C compiler
#endif
#if defined (WIN32)
#include <winsock2.h>
#elif defined (UNIX)
/* Rien pour le moment */
#else
#error not defined for this platform
#endif
#define MY_PORT 234
#define SUCCESS 0
#define FAILURE -1
int main(void)
{
 #if defined (WIN32)
        WSADATA WSAData;
     int error = WSAStartup(MAKEWORD(2,0), &WSAData);
 #else
    int error = 0;
  #endif
 if(!error)
 {
  /* 
  Prototype : int socket(int domain, int type, int protocol);
  SOCK_STREAM c'est uniquement pour TCP/IP. Pour UDP/IP c'est SOCK_DGRAM
  On construit une socket
  */
  SOCKET mySocket = socket(AF_INET, SOCK_STREAM, 0);
  /* Si ma socket est valide */
  if(mySocket != INVALID_SOCKET)
  {
   SOCKADDR_IN sin;
   int sock_err;
   char txt[256] = "Bienvenue sur notre serveur\0";
   fprintf(stdout, "La socket %d est ouverte en mode TCP/IP\n", mySocket);
 
   /* Adresse ip automatique */
     sin.sin_addr.s_addr = htonl(INADDR_ANY);
     sin.sin_family = AF_INET;
     /* Ecoute d'un port */
     sin.sin_port = htons(MY_PORT);
   sock_err = bind(mySocket, (SOCKADDR *) &sin, sizeof sin); 
   if(sock_err != SOCKET_ERROR)
   {
    /* On commence le listage */
    sock_err = listen(mySocket, 5); 
    fprintf(stdout, "Listage du port %d ...\n", MY_PORT);
    if(sock_err != SOCKET_ERROR)
    {
     /*On attend que quelqu'un se connecte */
     fprintf(stdout, "Attente de connection sur le port %d ...\n", MY_PORT);
     SOCKADDR_IN newSin;
          int recsize = (int) sizeof newSin;
          SOCKET newSocket = accept (mySocket, (SOCKADDR *) &newSin, &recsize);
          if (newSocket != INVALID_SOCKET)
          {
      int rsltOfShutdown;
      fprintf (stdout, "Connection d'un client avec la socket %d de %s:%d\n", newSocket, inet_ntoa (newSin.sin_addr), htons (newSin.sin_port));
 
      sock_err = send(newSocket, txt, sizeof(txt), 0);
 
      if(sock_err != SOCKET_ERROR)
      {
       fprintf(stdout, "Le message [%s] est envoye'\n", txt);
      }
      else
      {
       fprintf(stdout, "Erreur lors de l'envoie du message\n");
      }
      rsltOfShutdown = shutdown(newSocket, 2);
 
      if(rsltOfShutdown != SUCCESS)
      { 
       fprintf(stdout, "Erreur lors de la fin de connection\n");
      }
      else
      {
             fprintf (stdout, "Fermeture du client avec la socket %d\n", newSocket);
             closesocket(newSocket);
       fprintf(stdout, "Fermeture du serveur");
      }
     }
     }
    }
  }
  else
  {
   fprintf(stderr, "Socket %d invalide", mySocket);
  }
 }
 
 #if defined (WIN32)
        WSACleanup();
  #endif
 getchar();  
  return EXIT_SUCCESS;
}
client

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
/*
  Name: ClientMySocket
 Email: <a href="mailto:samyhocine@hotmail.fr">samyhocine_at_hotmail.fr</a>
 Website: <a href="http://www.samsoft.ift.fr" target="_blank">samsoft.ift.fr</a>
  Copyright: Gpl v2
  Author: Samy Hocine
  Date: 10/10/07 14:14
  Description: Partie client de MySock
*/
#include <stdio.h>
#include <stdlib.h>
#ifdef __cplusplus
#error Be sure you are using a C compiler
#endif
#if defined (WIN32)
#include <winsock2.h>
#elif
/* Rien pour le moment */
#else
#error not defined for this platform
#endif
#define MYPORT 234
int main(void)
{
  #if defined (WIN32)
        WSADATA WSAData;
     int error = WSAStartup(MAKEWORD(2,0), &WSAData);
 #else
    int error = 0;
  #endif
 if(!error)
 {
  /* On construit la socket */
  SOCKET mySocket = socket(AF_INET, SOCK_STREAM, 0);
 
  if(mySocket != INVALID_SOCKET)
  {
   SOCKADDR_IN sin;
   sin.sin_addr.s_addr = inet_addr("127.0.0.1");
   sin.sin_family = AF_INET;
   sin.sin_port = htons(MYPORT);
   /* Si la connection est re'ussie */
   if(connect(mySocket, (SOCKADDR *) &sin, sizeof(sin)) != SOCKET_ERROR)
   {
    char txt[256] = "";
    fprintf(stdout, "Connection a %s sur le port %d\n", inet_ntoa(sin.sin_addr), htons(sin.sin_port));
 
    if(recv(mySocket, txt, sizeof(txt), 0) != SOCKET_ERROR)
    {
     fprintf(stdout, "Message du serveur : %s\n", txt);
    }
    else
    {
     fprintf(stdout, "Erreur lors de la re'ce'ption du message");
    }
   }
   else
   {
    fprintf(stdout, "Erreur lors de la connection\n");
   }
   /* Fermeture de la socket */
   closesocket(mySocket);
  }
 }
 #if defined (WIN32)
        WSACleanup();
  #endif
  getchar();
  return EXIT_SUCCESS;
}
Merci d'avance

PS: Je me suis basé principalement sur le cours réseau : http://emmanuel-delahaye.developpez.com/reseaux.htm (pour le fond)