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 :
Dans le but de réaliser un petit logiciel de conversation par ip (client/serveur) et là je vois flou, c'est le brouillard.
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
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
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
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; }
Merci d'avance
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; }
PS: Je me suis basé principalement sur le cours réseau : http://emmanuel-delahaye.developpez.com/reseaux.htm (pour le fond)
Partager