Gestion des sockets clients dans une application serveur
Bonjour,
Je suis en train de construire une application server et, lors du OnAccept de mon socket serveur, un nouveau socket client est à chaque fois créé:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
Void SocketServeur::OnAccept(int nErrorCode)
{
CSocket::OnAccept(nErrorCode)
CClientSocket * pSocket = new CClientSocket(this);
if (Accept(*pSocket)
{
pSocket->Init();
m_connectionList.AddTail(pSocket); //de type CPtrList
}
else
delete pSocket;
} |
Ensuite, je reçois correctement des messages de mes clients connectés (onReceive) que je traite en les affichant à l'écran. Et lorsqu'un socket client se ferme, le Onclose du client est bien appelé.
Enfin, lorsque je ferme mon application, je fais un delete des Sockets clients contenu dans m_connectionList.
Ma question est la suivante: Si je stocke mes sockets clients dans une liste (m_connectionList) pour une raison évidente de mémoire (celle-ci doit être gérée en cas de déconnection des objets clients ou lors de la fermeture de l'application) le socket serveur s'occupe-t-il seul de la gestion de tous les sockets clients qui se sont connectés à lui (réception des messages, fermeture des connections ...) ? En d'autres termes, dois-je prévoir des routines (sous forme de thread, par exemple) qui, pour chaque client, écouteront si des messages arrivent ou si des connections se défont? Apparemment, le socket serveur fait ça très bien tout seul (puisque OnClose et OnReceive sont bien appelés), mais j'aimerais une confirmation. Et si quelqu'un pouvait me dire où ces sockets sont stockés/gérés dans l'objet serveur, je serais comblé.
Merci à tous,
Hugues.
:tagcode:
Re: Gestion des sockets clients dans une application serveur
Citation:
Envoyé par Depteam1
Bonjour,
Je suis en train de construire une application server et, lors du OnAccept de mon socket serveur, un nouveau socket client est à chaque fois créé:
Ma question est la suivante: Si je stocke mes sockets clients dans une liste (m_connectionList) pour une raison évidente de mémoire (celle-ci doit être gérée en cas de déconnection des objets clients ou lors de la fermeture de l'application) le socket serveur s'occupe-t-il seul de la gestion de tous les sockets clients qui se sont connectés à lui (réception des messages, fermeture des connections ...) ? En d'autres termes, dois-je prévoir des routines (sous forme de thread, par exemple) qui, pour chaque client, écouteront si des messages arrivent ou si des connections se défont? Apparemment, le socket serveur fait ça très bien tout seul (puisque OnClose et OnReceive sont bien appelés), mais j'aimerais une confirmation. Et si quelqu'un pouvait me dire où ces sockets sont stockés/gérés dans l'objet serveur, je serais comblé.
Merci à tous,
Hugues.
la liste doit etre gerée dans les 2 cas sur le message onclose en cas de fermeture du client , ou en cas de fermeture du serveur ( la liste devrait etre vide : on ne devrait pas fermer le serveur si il y a des clients sauf maintenance !).
si tu utilises la classe CAsyncSocket pas besoin de thread ,la classe crée en interne une fenetre de traitement des messages pour chaque client.
Note la gestion des sockets avec CAsyncSocket est merdi... à cause justement des fenetres windows ,c'est un restant d heritage du 16 bits...
je comprends pas ta derniere question.
:D