Bastien35
Messages postés20Date d'inscriptionmercredi 28 mai 2003StatutMembreDernière intervention25 septembre 2007
-
1 août 2007 à 16:58
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
1 août 2007 à 19:53
Bonjour à tous,
J'ai développé une application client/serveur pour l'envoi de messages en interne basé sur les winsocks.
Cette application fonctionne très bien dans le cadre d'un fonctionnement "normal".
Mon problème est le suivant:
Existe-il un moyen de fermer les winsocks ainisi que l'application en même temps que Windows? J'ai surfer sur le net et je n'ais rien trouver sur ce sujet. Pour être plus précis, lorsque l'on quitte normalement (bouton "Quitter") l'application, les connexions se ferment bien et les clients sont bien déconnectés du serveur. Mais lorsque l'on quitte windows sans fermé l'application (oubli) au préalable, les connexions restent activent et empêchent, donc, au redémarrage de windows ainsi que de l'application que les clients se connectent.
Auriez-vous, donc, une idée à me soumettre?
D'avance merci pour vos réponses.
Bonne journée.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 1 août 2007 à 19:38
Si tu quitte Windows, je doute que les connections restent ouvertes en tout cas sur cette machine là. Sur les machines qui y sont connectées effectivement les connections vont restée ouvertes un certains temps.
Sinon regarde les évènement QueryUnload et Unload de ta form, tu as un paramètre qui t'indique la raison de la requette de fermeture de la form.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 1 août 2007 à 19:53
Salut
Comme le dit Casy, c'est dans Form_QueryUnload dans lequel le programme passe en cas de demande de fermeture, volontaire ou pas.
Un des paramètres de cette Sub te fournit la raison (UnloadMode : voir l'aide).
Si tu refuses que l'application soit fermée, passe le Cancel à True avant de sortir de cette Sub
Si tu autorises la fermeture de l'application, laisse le Cancel à False (ou 0), la Sub suivante (et dernière) qui s'exécutera sera Form_Unload. C'est là dedans qu'il faut fermer tes connexions.
Que les Winsocks de tes clients soient indexés ou pas, il te suffit de faire une boucle (en supposant que les Winsocks sont implantés sur ta forme et pas sur une autre) :
Dim xxx As Winsock
For Each xxx In Me
If xxx.State <> sckClosed Then
xxx.Close
DoEvents
End If
Next
Le DoEvents est important pour laisser le temps au composant d'exécuter cette fermeture
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)