begin process at 2010 02 10 14:41:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > CHAT CLIENT/SERVEUR AVEC WSAEVENT EN CONSOLE

CHAT CLIENT/SERVEUR AVEC WSAEVENT EN CONSOLE


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseaux & Internet Niveau :Débutant Date de création :27/12/2004 Date de mise à jour :12/01/2005 19:00:46 Vu / téléchargé :3 668 / 497

Auteur : Spiffou

Ecrire un message privé
Site perso
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Voila "ma" petite production sur les WSAEvent...
c'est un code en cpp avec des classes qui permet la réalisation
d'un chat en mode console à 2 (1 client, et 1 serveur).
Dans ce cas bien sur la gestion des socket avec WSAEvent n'est
pas nécessaire, mais comme m'application est assez simple c'est
assez pratique pour apprendre. Si vous voulez dialoguer à plusieurs,
il suffit de changer une var (EventTotal), cependant, le serveur ne repondra
qu'au dernier client connecté mais recevra les msg de tous les
autres clients.

Cette source a encore besoin d'être améliorée et je le ferai avec vos
commentaires si vous voulez bien m'en laisser.

Merci beaucoup  Aardman qui m'a plus que conseillé pour la prog WSAEvent.

ps:
evidemment comme on est en mode console ben si on recoit qqch pendant
que l'on ecrit ---> probleme.


Source

  • tout est dans le zip
tout est dans le zip

 Conclusion

Donc ici c'est les remerciements donc dans mon cas merci Aardman comme je l'ai deja dit.
Bug connus:
1-(c'est pas vraiment un bug) mais j'utilise la fonction TerminateThread ce qui est mauvais car elle ne libère pas la memoire allouée (bon ici du coup j'ai fait exprès de pas en allouer mais j crois que c mal d'utiliser cette fction :p)
2-la synchro des threads est bourrin et n'est pas parfaite à mon avis
3-ben c'est un mode console et je ne protege pas l'acces à la console donc si on recoit qqch pdt que l'on ecrit et bien on perd tt ce qui etait deja ecrit...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

27 décembre 2004 16:33:31 :
27 décembre 2004 16:48:48 :
changement de la fonction compressarray
28 décembre 2004 13:00:14 :
re-correction de la fction CompressArray
12 janvier 2005 19:00:51 :

 Sources du même auteur

Source avec Zip CONNECTION CLIENT SERVEUR AVEC WINSOCK SANS MFC

 Sources de la même categorie

Source avec Zip TIM_RESEAU, CLASSES POUR RESEAU COMPLET par williamallas
Source avec Zip INTERNET IP FINDER TROUVER VOS ADRESSE IP (INTERNET) par xmustapha
Source avec Zip CLIENT/SERVEUR AVEC TSOCKETSERVER & TCLIENTSOCKET par xmustapha
Source avec Zip REMOTE SHELL GEN par ganjarasta
PROXY IRC SIMPLE (WINDOWS/WINSOCK) par _michel

Commentaires et avis

Commentaire de Spiffou le 27/12/2004 16:20:45

oups attention, deja un pb la fonction compressarray est mal utilisé je m'attèle à la correction de cette premiere erreur...

:D

Commentaire de Spiffou le 27/12/2004 16:50:38

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...

Commentaire de aardman le 27/12/2004 22:42:10

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()...

Commentaire de Spiffou le 28/12/2004 11:16:48

en effet.
par contre dans ce cas precis ca marche puisque le nb d'utilisateur est limité à 2.
bon je recorrige...

merci.

Commentaire de Spiffou le 28/12/2004 12:58:23

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??

Commentaire de lilington le 09/01/2005 16:50:08

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

Commentaire de Spiffou le 09/01/2005 23:44:16

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...

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,421 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales