COMMENT SAVOIR SI UN PORT EST LIBRE AVANT DE MONTER UNE CONNEXION WINSOCK
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 2009
-
4 nov. 2004 à 17:01
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
3 avril 2005 à 22:51
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
thierrydelepine
Messages postés521Date d'inscriptionmardi 24 décembre 2002StatutMembreDernière intervention11 septembre 20086 3 avril 2005 à 22:18
non,
cela veut dire que un meme port dans le protocole TCP par exemple (valable aussi pour UDP) peut etre utilisé en ecoute et en envoi sans conflit par deux applications.
Je rajoute quand meme que l'appli qui est en ecoute recevera les envois de l'appli qui est en envoi (normal).
dans mon exemple je test si le port est libre pour se mettre en ecoute (Winsock1.Listen) il suffirai de modifier l'exemple pour faire un envoi (Winsock1.senddata) et ainsi tester le port non plus en ecoute TCP mais en envoi TCP.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 3 avril 2005 à 21:39
tiens, et en même tps, çà veut dire qu'on peut utiliser le même port simultanément avec 2 protocoles?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 3 avril 2005 à 21:38
en effet, c'est le 2e cas....
une idée? parce qu'au final, ça laisse bien croire que le port est libre, à tord.....
PCPT
thierrydelepine
Messages postés521Date d'inscriptionmardi 24 décembre 2002StatutMembreDernière intervention11 septembre 20086 3 avril 2005 à 20:42
deux possibilitées :
- le winsock est configurée en TCP et ton appli sur le 6400 est en UDP.
- ton appli utilise le port 6400 en TCP mais pas en ecoute mais en sortie.
Dans ces deux cas il n'y a pas d'erreur via le on error et c'est tout a fait normal.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 1 avril 2005 à 19:05
test effectué, j'utilise mon port 6400 avec une appli, je scann mes ports de 6000 à 7000 (boucle avec le on error..)
résultat : port(s) occupé(s) = 0
PCPT
thierrydelepine
Messages postés521Date d'inscriptionmardi 24 décembre 2002StatutMembreDernière intervention11 septembre 20086 4 mars 2005 à 13:56
??
meme principe sauf que tu remplace Winsock1.Listen
par Winsock1.bind (avec WINSOCK1 en UDP)
donc lorsque ton code execute la ligne Winsock1.bind,
si le port UDP est occupé l'erreur est géré par le : on error goto
et tu execute le ErreurPortOccupe:
cs_snow_angel
Messages postés23Date d'inscriptionmardi 20 avril 2004StatutMembreDernière intervention19 octobre 2005 4 mars 2005 à 00:27
bonjour,
Ceci est pour une connexion TCP mais en UDP,
Comment fait-on pour vérifier qu'un port est libre avant de BIND , sinon ca plante...
Ca fais un moment que je cherche et je ne trouve pas, on ne trouve de solutions que pour TCP.
Merci
Morricon
Messages postés41Date d'inscriptionlundi 23 décembre 2002StatutMembreDernière intervention 1 mars 2007 11 févr. 2005 à 14:50
Pas mal du tout, et en plus je n'y est pas pensé.. Simple et efficace..
A+
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 6 nov. 2004 à 12:38
Ok d'accord merci pour les infos
thierrydelepine
Messages postés521Date d'inscriptionmardi 24 décembre 2002StatutMembreDernière intervention11 septembre 20086 4 nov. 2004 à 18:20
precision pour le state
le winsock.state va te donner l'etat de ta connexion : active, en cours de connexion, erreur , connexion fermé, ... mais ne te dira pas si le port est libre pour que tu l'utilise sous VB.
en fait state te donne l'etat de ta connexion une fois monté mais avant de la monter tu ne sais pas si le port que tu as choisi n'est pas utilisé par une autre appli
thierrydelepine
Messages postés521Date d'inscriptionmardi 24 décembre 2002StatutMembreDernière intervention11 septembre 20086 4 nov. 2004 à 18:15
si tu créé une application 1 qui se met en ecoute sur le port 40000 par exemple, elle tourne en permanence.
tu créé une application 2 qui elle aussi veut se mettre en ecoute sur le port 40000 ou bien appeller une autre machine sur ce port et bien la deuxieme appli aura une erreur car le port est deja occupé par la premiere appli.
Cas concret :
sur un windows XP pro met en service le serveur HTTP IIS de microsoft, puis créé une application serveur HTTP qui ecoute sur le port 80 comme IIS alors ton appli aura une erreur pusique le port 80 est deja occupé par IIS.
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 4 nov. 2004 à 17:43
Ok.... mais ça veut dire quoi précisément qu'un port est occupé ? parce que je ne vois pas la différence avec connecté ?
thierrydelepine
Messages postés521Date d'inscriptionmardi 24 décembre 2002StatutMembreDernière intervention11 septembre 20086 4 nov. 2004 à 17:14
non ta commande verifie si tu as une connexion active sur ce port mais pour avoir le state il faut d'abord initialiser ta connexion winsock.
et si dès l'initialisation, le port est deja occupé par une autre apllication et que tu n'as pas fait de controle d'erreur alors ça plante.
en fait mon petit bout de code verifie si le port est libre,
si il est libre alors tu monte une connexion sur ce port puis par le winsock1.state tu peut savoir si tu est connecté avec une autre machine.
j'espere avoir été clair
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 4 nov. 2004 à 17:01
Pourquoi ne pas utiliser :
If Winsock.State = sckConnected Then
3 avril 2005 à 22:51
à tout hasard, tu maitrises bien le WinSock?
si oui, je veux bien un peu d'aide, cf mon pb :
http://www.vbfrance.com/forum.v2.aspx?ID=424543
en l'attente....
PCPT
3 avril 2005 à 22:18
cela veut dire que un meme port dans le protocole TCP par exemple (valable aussi pour UDP) peut etre utilisé en ecoute et en envoi sans conflit par deux applications.
Je rajoute quand meme que l'appli qui est en ecoute recevera les envois de l'appli qui est en envoi (normal).
dans mon exemple je test si le port est libre pour se mettre en ecoute (Winsock1.Listen) il suffirai de modifier l'exemple pour faire un envoi (Winsock1.senddata) et ainsi tester le port non plus en ecoute TCP mais en envoi TCP.
3 avril 2005 à 21:39
3 avril 2005 à 21:38
une idée? parce qu'au final, ça laisse bien croire que le port est libre, à tord.....
PCPT
3 avril 2005 à 20:42
- le winsock est configurée en TCP et ton appli sur le 6400 est en UDP.
- ton appli utilise le port 6400 en TCP mais pas en ecoute mais en sortie.
Dans ces deux cas il n'y a pas d'erreur via le on error et c'est tout a fait normal.
1 avril 2005 à 19:05
résultat : port(s) occupé(s) = 0
PCPT
4 mars 2005 à 13:56
meme principe sauf que tu remplace Winsock1.Listen
par Winsock1.bind (avec WINSOCK1 en UDP)
donc lorsque ton code execute la ligne Winsock1.bind,
si le port UDP est occupé l'erreur est géré par le : on error goto
et tu execute le ErreurPortOccupe:
4 mars 2005 à 00:27
Ceci est pour une connexion TCP mais en UDP,
Comment fait-on pour vérifier qu'un port est libre avant de BIND , sinon ca plante...
Ca fais un moment que je cherche et je ne trouve pas, on ne trouve de solutions que pour TCP.
Merci
11 févr. 2005 à 14:50
A+
6 nov. 2004 à 12:38
4 nov. 2004 à 18:20
le winsock.state va te donner l'etat de ta connexion : active, en cours de connexion, erreur , connexion fermé, ... mais ne te dira pas si le port est libre pour que tu l'utilise sous VB.
en fait state te donne l'etat de ta connexion une fois monté mais avant de la monter tu ne sais pas si le port que tu as choisi n'est pas utilisé par une autre appli
4 nov. 2004 à 18:15
tu créé une application 2 qui elle aussi veut se mettre en ecoute sur le port 40000 ou bien appeller une autre machine sur ce port et bien la deuxieme appli aura une erreur car le port est deja occupé par la premiere appli.
Cas concret :
sur un windows XP pro met en service le serveur HTTP IIS de microsoft, puis créé une application serveur HTTP qui ecoute sur le port 80 comme IIS alors ton appli aura une erreur pusique le port 80 est deja occupé par IIS.
4 nov. 2004 à 17:43
4 nov. 2004 à 17:14
et si dès l'initialisation, le port est deja occupé par une autre apllication et que tu n'as pas fait de controle d'erreur alors ça plante.
en fait mon petit bout de code verifie si le port est libre,
si il est libre alors tu monte une connexion sur ce port puis par le winsock1.state tu peut savoir si tu est connecté avec une autre machine.
j'espere avoir été clair
4 nov. 2004 à 17:01
If Winsock.State = sckConnected Then
ça ne fait pas la meme chose ?