Eviter une exception lorsque l'on se connecter a un port fermé

Résolu
warenbe Messages postés 145 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 septembre 2009 - 23 janv. 2006 à 19:53
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 1 févr. 2006 à 23:41
Yop
je cherche a me faire un scanner pour mon reseau (probleme de routeur)
et plutot que d'en prendre un tout fait j'ai voulu me faire le mien ^^

donc voila j'ai un probleme
j'ai ce code:

for (int i = portdeb; i < portfin; i++)
{
TcpClient tcpclient = new TcpClient(tbip.Text, i);
if (tcpclient.Connected)
{
NetworkStream ns = tcpclient.GetStream();
byte[] bytes = new byte[tcpclient.ReceiveBufferSize];
ns.Read(bytes, 0, (int)tcpclient.ReceiveBufferSize);
string reponse = Encoding.UTF8.GetString(bytes);
row.Add(i.ToString(), reponse);
}
tcpclient.Close();
}

le probleme est que quand un port est fermé je leve une exception... :(
comment faire pour eviter ça? je veux que lorsque le port est fermé il ne se passe rien et ça passe au port suivant...
donc soit je leve les exception et je les jete, soit je fais autrement
la premiere solution me plait guere car trop lente... (je voudrai qu'il s'ecoule que 3 secondes avant qu'il passe a un autre port...)

de l'aide svp ^^

3 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
1 févr. 2006 à 23:41
Salut,

Le try-catch pas propre ?!?!
Le temps d'attente n'a rien à voir avec la gestion d'exception, ça dépend de la manière dont la machine cible gère les demandes sur ports fermés :
- soit elle répond que l'accès au port est refusé, auquel cas l'échec est rapide.
- soit elle se contente d'ignorer la demande et ne répond pas, auquel cas tu attend jusqu'à arriver au délai de timeout.

/*
coq
MVP Visual C#
*/
3
taoetc Messages postés 346 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 3 septembre 2007 3
24 janv. 2006 à 14:40
tu colles ton code dans un try
{
//code
}catch (Exception )
{
}

cela intercepte ton exception sans que tu sortes de ton programme

pas super comme solution, mais ca marche


Be happy , by
Tao
0
warenbe Messages postés 145 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 septembre 2009
24 janv. 2006 à 19:15
oui mais je veux eviter ça
pour deux raisons: ça me semble pas super "propre" et seconde raison, je veux que ça evite d'attendre une reponse de l'ordi distant pendant trop longtemp
avec cette methode ça attend une 10e de secondes voir plus avant de lever l'exception... je veux pouvoir faire en sorte a ce que ça n'attende que 5 secondes par exemple ou meme 3
0
Rejoignez-nous