begin process at 2012 05 30 02:55:07
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Réseau & Internet

 > 

LAN Socket et multi thread


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

LAN Socket et multi thread

jeudi 18 mai 2006 à 12:41:51 | LAN Socket et multi thread

RV2931

Bonjour,

Je suis en train d'essayer de faire un chat en réseau, chaque machine est client/serveur sur un port. Mais on m'a conseillé de faire un thread client pour envoyer les message, et un thread serveur pour les recevoir et gérer les autres messages du genre "demande de connection de l'adresse xxx.xxx.xxx.xxx", enfin bon, ça c la structure que j'ai adopté, c p'tet pas la meilleur mais je le voyais comme ça...

Je connais le multithread, mais ce que je ne vois pas trop, c'est ce que je doit mettre dans chaque thread. Pour moi, je vois que chaque thread doit traiter les messages venant du socket ( READ WRITE, CONNECT...), mais je vois pas trop comment faire en sorte que ces thread reçoivent les messages. Le thread est en fait une nouvelle fonction de traitement de message, sauf qu'un thread, il a des arguements  fixes à sa création, donc ????

En écrivant, ce message, j'ai régardé un peu mon code, et j'ai vu, que c'est WSAAsyncSelect qui permet de dire quel est le handle qui recevera les messages.

Un handle, c'est un handle sur un objet, hors une fonction n'est pas un objet, sauf si c'est un thread.?.?.?.? Sauf que le thread, je ne crois qu'il puissent recevoir de message système vu son prototype, enfin je ne sais pas, si qqu'un peut m'aider...

Merci
jeudi 18 mai 2006 à 17:17:32 | Re : LAN Socket et multi thread

max12

Administrateur CodeS-SourceS
Tu peux aussi créer un thread par client côté serveur et recevoir les messages avec recv (qui est autoblocant donc parfait pour un thread et un boucle infinie). Chaque thread va s'occuper de chacun des clients de façons indépendante et en paramètre à la création du thread tu peux passer un pointeur qui  pointera vers une structure qui contiendra les informations spécifiques à chaque client, par exemple dans mon cas j'utililse une liste chainée et je passe l'adresse du maillons de la chaine en argument. Ceci permet de pouvoir parcourir facilement les clients par la suite si on veut faire interragir chaques clients.

A+

[ Lien ]
Cégep Lévis
jeudi 18 mai 2006 à 17:27:49 | Re : LAN Socket et multi thread

RV2931

ouay, aussi,

mais je vois toujours pas comment envoyer les messages système du socket sur chacun des threads ???

je vois par la fonction WINAPY, et WndProc, là ok;
je vois toujours les notions de sous-classement pour le traitement des messages directement par un objet et pas par la fenêtre, j'en utilise,
mais comment l'appliqué à un thread ????
parce que ça implique que tu ouvre un serveur dans le thread, mais je vois pas comment les messages evènementiels du socket arrivent au thread, ou alors c le thread principal qui les gère, et qui recrée des évenement de synchronisation du genre CreateEvent.... WaitForSingleObject(hEventReadContact1); ????

L'idée me semble faisable, mais est-ce déontoligiquement dans les règle de programmation de socket en multi-thread ?
vendredi 19 mai 2006 à 07:21:40 | Re : LAN Socket et multi thread

max12

Administrateur CodeS-SourceS
Réponse acceptée !
Tu n'aura pas besoin de WSAAsyncSelect pour les évènement de thread, seulemet recv est correct, si receive est égal à 0 ou -1, alors le socket à fait un close, le connect c'est a la création du thread ... je sais pas si tu sais ou je veux en venir.

void ClientThread(ClientArbre *Client)
{
    char Buffer[1024+1]; //Avec le caractère 0

    //À l'ouverture du socket

    while (1)
    {
    Val = recv(Client->Sock, Buffer, 1024, 0);

    if (Val <= 0)
        break; //Le close

        //ICI TU TRAITE LES DONNÉES !!
    }

    //Ici le code pour socket quand il est fermée

}

C'est le code d'un thread pour l'exemple. Mais attention ! Si tu utilise une liste chainée il faudra bien sûr utiliser la synchronisation (CriticalSection ou WaitForSingle etc ...) pour éviter qu'un thread veulent accèder à un élément ayant été détruit mais sans que la liste ait été mise à jour. Enfin c'est seulement pour éclaicir un peu ma pensée.

Sur ce je te donne un e-book gracieuseté de Brunews, tu y trouvera la méthode des blocking-socket et plein d'autre :
[ Lien ]

A+

[ Lien ]
Cégep Lévis


Cette discussion est classée dans : message, messages, socket, thread, xxx


Répondre à ce message

Sujets en rapport avec ce message

prob socket [ par flatou ] salutj'ai créé une appli serveur, banale : un client se connecte, il envoi un message et le serveur affiche le message.j'ai utilisé cela pour la recep socket [ par gaussdelphine ] J'essaye de programmer une socket em mode datagramme SOCK_RAW. J'ai le message d'erreur suivant à la compilation:sizeof applied to an incomplete type PostThreadMessage / GetMessage : perte de messages [ par swonder ] Bonjour,J'ai un problème de perte de messages dans la communication inter-thread, que je suppose dû au fait que GetMessage n'a pas de file d'attente d les messages en API [ par Adeon ] salut!En API il intervient toujours cette partie de codes qui suit qui gere les messages fenetres.J'aimerai que qq m'explique ce que font les fonction buffer [ par coins ] Bonjour a tous, J'ai utilise le fonction recv () pour recupere de message de socket, mais, le probleme est , si la taille de message superieur que la Socket -> Ip [ par CyberP ] Comment obtenir l'adresse ip (sous forme de char* : xxx.xxx.xxx.xxx) à partir d'un objet socket (je ne veut pas d'objet SOCK_ADDR mais une ip en char* Thread et socket [ par epoc ] Petite question.J'ai créé un petit serveur avec un socket 'bloquant'. Etant donné que je désire que mon aplication ne soit pas bloquée j'ai créé un th Gérer les messages d'erreur de TClientSocket [ par internetservices ] Salut,je suis en train de créer un programme en C++ utilisant les sockets. J'ai lu que pour éviter d'avoir le message par défaut de windows "raised ex Problème d'envoie par socket [ par CyberP ] J'ai fait un programme qui se connecte à un serveur ftp (le serveur ftp est aussi sur mon ordi). Je me connecte avec la fonction connect() et je recoi Client - serveur C++ avec thread [ par nono_in_maribor ] Bonjour!!Voila, je previens tout de suite je ne suis pas un pro du c++. Mon probleme est le suivant : j'ai fait un client-serveur en c++ (sous devc++)


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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,874 sec (3)

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