Spiffou
Messages postés100Date d'inscriptionjeudi 1 avril 2004StatutMembreDernière intervention 9 juin 20141 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és158Date d'inscriptionsamedi 31 janvier 2004StatutMembreDernière intervention12 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és100Date d'inscriptionjeudi 1 avril 2004StatutMembreDernière intervention 9 juin 20141 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;
sinon aucun commentaire sur le code ou la gestion de threads??
Spiffou
Messages postés100Date d'inscriptionjeudi 1 avril 2004StatutMembreDernière intervention 9 juin 20141 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és1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 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és100Date d'inscriptionjeudi 1 avril 2004StatutMembreDernière intervention 9 juin 20141 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és100Date d'inscriptionjeudi 1 avril 2004StatutMembreDernière intervention 9 juin 20141 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...
9 janv. 2005 à 23:44
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...
9 janv. 2005 à 16:50
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
28 déc. 2004 à 12:58
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??
28 déc. 2004 à 11:16
par contre dans ce cas precis ca marche puisque le nb d'utilisateur est limité à 2.
bon je recorrige...
merci.
27 déc. 2004 à 22:42
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()...
27 déc. 2004 à 16:50
là par contre j'attends vraiment un avis pour valider cette solution...
27 déc. 2004 à 16:20
:D