j ai modifie un programme server/client pour pouvoir communiquer avec les sockets dans le but d elaborer un petit chat.
malheuresement pour que ca fonctionne le server doit absolument etre le premier a envoyer le message et la communication est la suivante server-client puis client-server
C est pour cela que je ne considere pas ca vraiment comme un chat j aimerais pouvoir des que je lance les programmes etre capable de communiquer comme dans un vrai chat donc que le client ou le server soit capable d envoyer autant de messages qu'il veut.

pouvez- vous jetter un coup d oeil a ce code 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
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
CLIENT
#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); }



SERVER
#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); }
]
[/QUOTE][/CODE]