Bonjour, j'ai codé un client et un serveur pour une messagerie instantanée qui fait partie d'un projet que je dois rendre pour mardi, sauf que j'ai l'impression que les deux refusent de marcher ensemble.
Le client comme le serveur compilent niquel mais ils ne remplissent pas leur fonction on dirait...
Je lance d'abord le serveur avant le client, mais au lancement du client il est sensé se connecter au serveur et le serveur afficher un message comme quoi la connexion a été acceptée, sauf que ce message ne s'affiche jamais, et les socket envoyées depuis le client ne sont jamais traitées par le serveur...
Voici les codes en question :
Boucle de traitement du serveur :
Côté client, un peu + de code :
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 while (true) { std::cout << "OK" << std::endl; sockaddr_in from = {0}; int addrlen = sizeof(from); CLIENT newClient(accept(server, (SOCKADDR*)(&from), &addrlen), from); std::cout << "Client connecté" << std::endl; if (newClient.m_connected) // la socket est connectée { std::thread processing(Process, newClient); processing.detach(); } }
La boucle de gestion du client :
Les deux fonctions lancées en threads :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 std::thread sending(sendMessage, server); std::thread receiving(recvMessage, server); sending.detach(); receiving.detach(); while (true) { }
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 void sendMessage(SOCKET s) { while (true) { std::string buff; std::cout << "[Vous] "; std::getline(std::cin, buff); std::cout << std::endl; int Bytes = send(s, buff.c_str(), 1024, 0); if (Bytes <= 0) { std::cout << "[ERREUR] Interruption de la connexion avec le serveur" << std::endl; break; } } }Merci d'avance pour l'aide que vous pourriez m'apporter !
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 void recvMessage(SOCKET s) { while (true) { char buffer[1025]; int Bytes = recv(s, buffer, 1024, 0); if (Bytes <= 0) { std::cout << "[ERREUR] Interruption de la connexion avec le serveur" << std::endl; break; } std::cout << "[Message] " << buffer << std::endl; } }
Partager