dalian_gate
Messages postés5Date d'inscriptiondimanche 19 novembre 2000StatutMembreDernière intervention27 février 2006
-
23 févr. 2006 à 23:40
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
27 févr. 2006 à 23:00
Je développe deux petites applications TCP en VB6 SP6, le client et le serveur.
Il n'ya pas de problème de connexion les applications fonctionnent bien, en tout cas la première fois, mais lorsque je ferme le client et je le réouvre, j'ai une erreur "Adresse en utilisation".
J'ai tout essayé le "Winsock1.Close" dans le unload de mon application, le "Localhost = 0",
Mais mon port reste ouvert (j'utilise fport pour voir ça).
Je doit attendre quelques minutes pour que mon port se ferme, donc je me pose des questions si c'est pas XP SP2 qui me fait de blagues .
Par contre le serveur ne me pose aucun problème lorsque je le ferme le client le détecte, le port se ferme, tout comme il faut.
Donc pitié aidé moi avant que je commence à débuguer à la Canadienne c'est à dire à la hache.
dalian_gate
Messages postés5Date d'inscriptiondimanche 19 novembre 2000StatutMembreDernière intervention27 février 2006 24 févr. 2006 à 09:50
Le port client c'est le 8750 et le port serveur c'est le 8751 mais j'avais essayé avant 60000 et 60001.
Alors voici mon ConnectionRequest du serveur :
Private Sub JamSock_ConnectionRequest(ByVal requestID As Long)
' Fermeture du Socket si Ouvert
If JamSock.State <> sckClosed Then JamSock.Close
' Acquittement de la connexion
JamSock.Accept requestID
' Visualisation de la connexion
tbcommand.Text = "Connection"
End Sub
Et la le close du socket serveur, sachant que je veux que le serveur reste actif même si le client se connecte ainsi un nouveau client peut se connecter (serveur mono-client)
Private Sub JamSock_Close()
If JamSock.State <> 0 Then
JamSock.Close
End If
JamSock.Listen
End Sub
Et le close du socket client
Private Sub JamSock_Close()
' Logiciel en version Small
Call CLOSEJAM
End Sub
CLOSEJAM() : uniquement un redimensionnement de ma fenêtre principale
Et encore la le unload de ma fenêtre principale (la boucle do-loop à été mise par désespoir de cause, mais ça ne change rien) :
Private Sub Form_Unload(Cancel As Integer)
' Fermeture du port avant de sortir
Do
JamSock.Close
Loop While JamSock.State <> 0
End Sub
Mais je suis en train de me dire que c'est peut-être parce que le serveur laisse son port ouvert ??? non comme même pas ou sinon un autre client ne pourrait pas se connecter.
J'espère que j'ai tous mis et je te remercie si tu peux m'aider.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 24 févr. 2006 à 10:43
salut,
non pour le serveur c'est correct.
en fait ce qui est chiant dans le socket c'est que WSK.CLOSE et
WSK_CLOSE (procédure / évènement) ont le même nom mais ne font pas la
même chose.
pour mieux comprendre, tu peux poser un timer qui afficherait l'état de
ton socket. tu verrais alors que quand le serveur fait CLOSE
(commande), le CLOSE (évènement) client se déclenche sans pour autant
passer l'état à 0 - SckClosed.
tant que la connection serveur n'est pas réellement fermée (tangent
ici), alors l'état client est "en cours de fermeture" (6 ou 8 de
mémoire).
donc pour ton serveur, dans le doute, je mettrai :
Private Sub JamSock_Close()
If JamSock.State <> 0 Then
JamSock.Close
DoEvents 'donne la main au système (çà fait une "micro-pause"...)
End If
JamSock.Listen
End Sub
et la vraie erreur d'après moi est :
Private Sub JamSock_Close()
JamSock.Close 'sinon il reste "en cours"
DoEvents
' Logiciel en version Small
Call CLOSEJAM
End Sub
et pour tes UnLoad, ton test (boucle) est très bien. pareil tout de même... ajouter un DoEvents
dalian_gate
Messages postés5Date d'inscriptiondimanche 19 novembre 2000StatutMembreDernière intervention27 février 2006 24 févr. 2006 à 12:49
J'ai tout essayé, c'est vrai qu'une petite pause avant de quitter le client était intéressante mais ça a rien changé.
En regardant de plus près je confirme c'est bien XP sp2 qui me fait des blagues puisque c'est "System" qui conserve le port ouvert.
Aussi j'ai lancé le serveur sur un autre poste et phénomène paranaormal lorsque j'établis une connexion client-serveur, je ferme le serveur et le port reste ouvert et c'est toujours sous XP sp2.
Donc là je comprend plus rien ( ou plutôt ça fait un bout de temps que je comprend plus rien), j'ai l'impression que le port ne s'ouvre uniquement lorsque je fait winsock.connect et le winsock.close ne fait rien au niveau du socket puisque il ne le ferme pas au niveau de l'OS.
Je soupsonne de plus en plus l'OS XP SP2. Dans le doute j'ai autorisé les ports 8750 et 8751 dans le firewall XP, mais ça ne fait rien.
A ce niveau je vois pas, ça doit être trop compliqué pour moi.
Donc si tu vois autre chose ça m'intéresse.
@+
Vous n’avez pas trouvé la réponse que vous recherchez ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 24 févr. 2006 à 15:03
quand j'utilise Winsock, tant en client qu'en serveur, toujours un close avant le connect.
le serveur fait toujours un close avant le accept.
en close (évènement), toujours un close (des 2 cotés)
et error (évènement), toujours un close (des 2 cotés)
jamais aucun souci.. mais je suis sous XP SP1.
essai une chose : met un 2e socket, et à la fermeture, lance le 2e en
écoute (donc rôle serveur) sur le port du premier socket, puis ferme
le. pour voir si le port est vraiment occupé... ou au pire, comme
connection par listen ou bind, ce socket fermera le port avant de
l'ouvrir...
dalian_gate
Messages postés5Date d'inscriptiondimanche 19 novembre 2000StatutMembreDernière intervention27 février 2006 27 févr. 2006 à 22:39
Bon après ce week end reposant, je me suis repenché sur ce problème en essayant ce que tu m'as dit, mais ça change rien le port reste ouvert 2 min à partir de la fermeture du programme quoi que je fasse.
Donc ça restera un mystère non résolu, heureusement que c'est pour un développement interne pour une application de test.