Bonjour,
Je viens de commencer les sockets et j'ai réalisé un modèle client/server qui peuvent dialoguer entre eux à tour de rôle.
Tout d'abord j'aimerais savoir si ma programmation est correcte ce que je pourrais améliorer ou même complétement changer
De même, est il préférable d'avoir un server qui reçoit les message des clients et les envoit ou alors est ce que chaque client doit être server ??
Ensuite j'aimerais savoir si il est possible de ne pas devoir attendre pour recevoir un message de l'autre personne, exemple, dans mon programme le server envoit un message, s'affiche au client puis le server attend une réponse obligatoire du client pour continuer...
Enfin, est ce que je peus lancer 3 programmes en même temps pour qu'ils puissent communiquer entre eux ??
Client:
Server:
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 #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> #include<winsock2.h> #pragma comment (lib, "ws2_32.lib") void Couleur(int); void main() { WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WSAData); SOCKET sock, csock; SOCKADDR_IN sin; int tentative; //Nombre de tentative pour se connecter au server char buffer[50]; //Message à envoyer bool connection; //Terminer la connection printf("\n\n\t\t\t\t CLIENT\n"); printf("\t\t\t\t ------\n\n"); sock = socket(AF_INET, SOCK_STREAM, 0); sin.sin_addr.s_addr = inet_addr("127.0.0.1"); sin.sin_family = AF_INET; sin.sin_port = htons(69); tentative = 0; do { connection = false; csock = connect(sock, (SOCKADDR *)&sin, sizeof(sin)); //Connection au server if(csock != SOCKET_ERROR) { printf("\n\n Connexion etablie..."); do { recv(sock, buffer, sizeof(buffer), 0); //Reçoit le message duserver if(strcmp(buffer, "EXIT") != 0) //Le server envoit EXIT pour stopper le tchat { Couleur(12); printf("\n\n Server : "); Couleur(7); printf("%s", buffer); //Affiche le message envoyer par le server printf("\n * Message : "); fflush(stdin); gets(buffer); send(sock, buffer, sizeof(buffer), 0); //Envoit un message au server } }while(strcmp(buffer, "EXIT") != 0); connection = true; } else { printf("\n\n\a\t\t ERREUR DE CONNECTION AVEC LE SERVER\n\n"); tentative++; printf(" Appuyer sur une touche pour essayer de vous connecter..."); getch(); } }while(tentative < 3 && connection == false); closesocket(sock); //Ferme le socket WSACleanup(); //Ferme les WSA printf("\n\n Appuyer sur une touche pour quitter..."); getch(); } void Couleur(int color) { HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hcon, color); }
Merci
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 #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<winsock2.h> #pragma comment (lib, "ws2_32.lib") void Couleur(int); void main() { WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WSAData); SOCKET sock, csock; SOCKADDR_IN sin, csin; int csinsize; char buffer[50]; bool envois = false; printf("\n\n\t\t\t\t SERVER\n"); printf("\t\t\t\t ------\n\n"); sock = socket(AF_INET, SOCK_STREAM, 0); sin.sin_addr.s_addr = INADDR_ANY; sin.sin_family = AF_INET; sin.sin_port = htons(69); bind(sock, (SOCKADDR *)&sin, sizeof(sin)); listen(sock, 2); printf(" Attente de connection avec le client..."); csinsize = sizeof(csin); csock = accept(sock, (SOCKADDR *)&csin, &csinsize); printf("\n Connexion etablie...\n\n"); if(csock != INVALID_SOCKET) //Si la connection est acceptée { do { printf("\n * Message : "); fflush(stdin); gets(buffer); send(csock, buffer, sizeof(buffer), 0); //On envoit un message au client recv(csock, buffer, sizeof(buffer), 0); //On attend une rèponse de la part du client Couleur(14); printf("\n\n Client : "); Couleur(7); printf("%s", buffer); //Affiche le message envoyé par le client }while(strcmp(buffer, "EXIT") != 0); //Le client envoit EXIT pour stopper le tchat } closesocket(sock); //Ferme le socket WSACleanup(); //Ferme le WSA printf("\n Connexion terminee...\n\n"); printf("\n Appuyer sur une touche pour quitter..."); getch(); } void Couleur(int color) { HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hcon, color); }
Bonne soirée
Partager