Comment vérifier un socket (TCP) pour savoir s'il est connecté ?
J'ai lu à propos de la Socket.Connected
la propriété dans MSDN mais il est dit qu'il ne montre que l'état en fonction de la dernière entrée/sortie. Ce n'est pas utile pour moi, car je veux faire ceci avant en essayant de lire à partir de la prise. La section des remarques note également que :
Si vous avez besoin de déterminer l'état actuel de la connexion, effectuez un appel appel Send non bloquant, à zéro octet. Si l'appel revient avec succès ou lance un code d'erreur WAEWOULDBLOCK (10035), la socket est toujours connectée. connectée ; sinon, la socket n'est plus plus connectée.
L'exemple de la même page montre comment procéder. (1) Mais un message de Ian Griffiths dit que je devrais lire de la prise, et non envoyer à travers elle.
Un autre message de Pete Duniho dit :
... après que vous ayez appelé
Shutdown()
, appelezReceive()
jusqu'à ce qu'il renvoie0
(en supposant que le terminal distant ne va pas ne va pas réellement vous envoyer quelque chose, cela se produira dès que le point de terminaison a reçu toutes vos données). données). Si vous ne faites pas cela, vous n'avez aucune assurance que le point de terminaison distant a effectivement reçu toutes les données que vous avez envoyées, même en utilisant une douille.
Je ne comprends pas vraiment sa déclaration sur le fait d'appeler Receive()
pour s'assurer que le point d'accès distant a bien reçu toutes les données que je envoyé . (Les sockets bloquent-ils la réception jusqu'à ce que le tampon d'envoi soit vide ?)
Je suis confus par les différentes méthodes proposées. Pourriez-vous les expliquer ?
(1) Je me demande pourquoi le exemple pour le Socket.Connected
alloue un tableau de 1 octet, bien qu'elle appelle Send
avec une longueur de 0 ?