COMMENT SAVOIR SI UN PORT EST LIBRE AVANT DE MONTER UNE CONNEXION WINSOCK

MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 - 4 nov. 2004 à 17:01
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Derniè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.

https://codes-sources.commentcamarche.net/source/27325-comment-savoir-si-un-port-est-libre-avant-de-monter-une-connexion-winsock

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 avril 2005 à 22:51
ok, c'est aussi comme çà que je le supposait. je testerais tout de même pour en avoir la certitude ;)

à 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
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
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és 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
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és 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
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és 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
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és 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
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és 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
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és 23 Date d'inscription mardi 20 avril 2004 Statut Membre Dernière intervention 19 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és 41 Date d'inscription lundi 23 décembre 2002 Statut Membre Derniè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és 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
6 nov. 2004 à 12:38
Ok d'accord merci pour les infos
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
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és 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
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és 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
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és 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
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és 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
4 nov. 2004 à 17:01
Pourquoi ne pas utiliser :
If Winsock.State = sckConnected Then

ça ne fait pas la meme chose ?