Comment puis-je vérifier si un client déconnecté via Winsock en C++?
Comment puis-je vérifier si un client déconnecté via Winsock en C++?
à partir du serveur, vous voulez savoir si un socket client est toujours connecté ou pas?
voulez-vous dire ou c++ MFC?
définir "déconnecté";)
port sur l'autre extrémité est fermée pour quelque raison que ce soit.
reportez-vous aux liens dans mon post, la FAQ indique que la plupart des autres moyens de vérifier pour la déconnecter.
voulez-vous dire ou c++ MFC?
définir "déconnecté";)
port sur l'autre extrémité est fermée pour quelque raison que ce soit.
reportez-vous aux liens dans mon post, la FAQ indique que la plupart des autres moyens de vérifier pour la déconnecter.
OriginalL'auteur | 2009-03-26
Vous devez vous connecter pour publier un commentaire.
Beej Réseau du Guide de Programmation
si vous appelez recv en mode de blocage et il revient avec 0 octets lus, le socket a déconnecté, sinon il attendre pour les octets reçus.
Regarder dans cette FAQ 2.12
exemple de sélectionner sur cette page.
Sockets BSD, et ils sont utilisés partout.
OriginalL'auteur sfossen
Vous ne pouvez dire si un socket TCP est "déconnecté" en tentant d'envoyer des données. C'est parce que la conception du protocole est telle qu'il est censé permettre de pannes temporaires entre pairs. Donc, si vous vous connectez à partir d'Un par R1 par R2 via R3 à B et d'envoyer des données pour un certain temps et puis arrêter de vous envoyer pouvait débrancher R2->R3 (par exemple) et ni A, ni B, avis (ou de soins). Si vous puis de brancher R2->R4 et R4->R3 et a ensuite essayé d'envoyer des données entre A et B, alors les choses seraient "juste travail" et vous auriez jamais savoir. Si, toutefois, vous avez essayé d'envoyer des données lorsque R2->R3 a été débranché alors vous feriez (finalement, après tout, le niveau TCP tentatives) obtenez un message d'erreur en retour.
Maintenant, certains systèmes d'exploitation peuvent être en mesure de vous alerter sur le fait que votre carte réseau local n'est pas actuellement connecté et vous pourriez l'utiliser pour dire "je ne suis plus connecté à mes pairs", mais je ne le conseille pas.
Si le fait d'avoir de vos pairs de savoir quand les connexions sont "brisées" est important, alors soit utiliser une application de niveau "ping" message à envoyer à l'occasion de données entre les pairs ou l'utilisation de TCP keep-alive. Personnellement, j'irais pour le ping messages...
Edit: bien sûr tout ce qui est en supposant que vous voulez savoir si vous pouvez toujours envoyer des données sur une connexion, après tout, vous êtes informé lorsque le client n'envoie plus parce que votre lit sera de retour 0 octets et vous SAVEZ quand il se déconnecte son envoyer de côté parce que votre écrit ne pourront pas; vous SAVEZ aussi quand vous arrêtez pour envoyer ou recv côté de votre propre extrémité de la connexion...
Je suppose que je devrais avoir coincé avec la première réaction instinctive de réponse de "définir déconnecté" 😉
OriginalL'auteur Len Holgate
Il y a quelques différentes façons, mais la plus commune est de vérifier le résultat de réception ou d'envoi de commande:
Plus d'exemples (avec contrôle d'erreur, à la fois client et serveur) ici:
http://tangentsoft.net/wskfaq/examples/basics/
OriginalL'auteur Adam Davis
Si le résultat de send() ou recv() est SOCKET_ERROR et WSAGetLastError() renvoie WSAECONNRESET le client s'est déconnecté.
À partir de MSDN:
Cela fonctionne aussi avec les sockets blocage.
OriginalL'auteur slaviber