CHAT CLIENT/SERVEUR AVEC WSAEVENT EN CONSOLE

Spiffou Messages postés 100 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 9 juin 2014 - 27 déc. 2004 à 16:20
Spiffou Messages postés 100 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 9 juin 2014 - 9 janv. 2005 à 23:44
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/28432-chat-client-serveur-avec-wsaevent-en-console

Spiffou Messages postés 100 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 9 juin 2014 1
9 janv. 2005 à 23:44
ben en fait la file d'attente, comme son nom l'indique, permet d'autoriser un certain nb de connexion en attente.
en gros sur ce programme, une variable limite le nb d'utilisateur à 2. du coup lorsque 2 personnes sont connectées (le client + le serveur) plus personne ne peut se connecter.

la file d'attente permet à d'autres clients potentiels de se mettre en attente de connexion, cad que le serveur prendra leur connexion dès que le client en cours se sera déconnecté.
si la file d'attente est pleine, alors le client ne peut pas se connecter et sa fonction connect retourne....

par contre il est clair que les wsaevent sont inutiles et tres compliqués pour ce que j'en fait dans ce prog, mais c'etait juste pour apprendre.

pour ton prog de chat, tu pourra surement bcp l'améliorer si tu utilises des threads ou si tu utilises les mfc.
en effet, je ne protege pas l'accès à la console, donc si on recoit qqch pdt que l'on ecrit, les données sont perdues. avec les mfc, c'est plus facile de gérer ce genre de pb (grace aux champs de textes).


voila j'espère que j'ai été clair, si y'a un gosu du reseau qui voit que j'ai dit une betise, qu'il n'hésite surtout pas, mais bon ca devrait aller en principe...
lilington Messages postés 158 Date d'inscription samedi 31 janvier 2004 Statut Membre Dernière intervention 12 mars 2009
9 janv. 2005 à 16:50
Salut je débute un peut dans la programmation reseaux.J'aimerai savoir à quoi sert la file d'attente de 5
en fait j'ai globalemant compris ce qui ce passe mais dans les détaille je pige pas trop.j'ai fait moi même un petit programme de chat mais il fonctionne comme un talkywalky i.e le client parle et le server attend de recevoir avant de pouvoir parler à son tour et vise versa. j'ai donc été interressé par ta source mais je ne vois pas trop comment fair pour mon prog à moi.
sinon c'est pas mal
Spiffou Messages postés 100 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 9 juin 2014 1
28 déc. 2004 à 12:58
j'ai fait une correction:
comme je peux pas retirer les case du tableau puisqu'il est statique, je décale à la fin les cases event et socket (en mm tps pour pas perdre l'ordre) à '0' (correspondant aux connexions fermées). comme ca si on a plus de 2 connexions, la fonction devrait bien marcher...

void CReseau::CompressArray()
{
SOCKET temps;
WSAEVENT tempe;
int i;

for (i=0; i<EventTotal+1; i++)
{
if ( SocketArray[i] == 0 && EventArray[i] == 0)
{
temps = SocketArray[EventTotal];
SocketArray[EventTotal] = SocketArray[i];
SocketArray[i] = temps;

tempe = EventArray[EventTotal];
EventArray[EventTotal] = EventArray[i];
EventArray[i] = tempe;
}
}
}



sinon aucun commentaire sur le code ou la gestion de threads??
Spiffou Messages postés 100 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 9 juin 2014 1
28 déc. 2004 à 11:16
en effet.
par contre dans ce cas precis ca marche puisque le nb d'utilisateur est limité à 2.
bon je recorrige...

merci.
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
27 déc. 2004 à 22:42
Salut,
La fonction CompressArray est sencée enlever toutes les cases des 2 tableaux qui sont a zéro!
il ne faut surtout pas ranger ces tableaux par ordre décroissant! car tu melanges les index des events et des sockets.
EventArray[i] ne correspondra plus au socket SocketArray[i] apres un appel a CompressArray()...
Spiffou Messages postés 100 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 9 juin 2014 1
27 déc. 2004 à 16:50
voila j'ai corrigé la fonction compressarray, par ctre comme j'ai pas de tableau dynamique (pour event et socket) je fais un tri pour repousser les sockets et event que l'on a mis à 0 lors du FD_CLOSE.
là par contre j'attends vraiment un avis pour valider cette solution...
Spiffou Messages postés 100 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 9 juin 2014 1
27 déc. 2004 à 16:20
oups attention, deja un pb la fonction compressarray est mal utilisé je m'attèle à la correction de cette premiere erreur...

:D
Rejoignez-nous