Heu gros probleme logique et algorithme

billut Messages postés 74 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 5 décembre 2008 - 16 févr. 2006 à 10:55
billut Messages postés 74 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 5 décembre 2008 - 16 févr. 2006 à 12:03
"hello world !"
voila jai un "petit" probleme, j'ai créé un code qui me permet de faire un traceroute a partir dun ping, avec un Ttl de 1 et en l'augmentant de 1 a chaque routeur traversé.
bref, jai dans mon code une erreur, lorsque quand je fait un tracert ca indique "*",ici ca bloque lors de l'affectation de adr_passerelle=reply.Adress.ToString(); , car cette valeur ne peut pas etre nulle, alors, j'ai mis une condition "if" mais le probleme cest :
>> lorsque jexcécute le programme, ca me dit erreur a la ligne adr_passerelle et ca ne méxcécute pas le "if" cat il est placé aprés, et si je le place avant, adr_passerelle ne sera pas connue.
voila, ca fait 3jours que je suis dessus, j'en peux plus la..
SVP aidez moi...



string adr_passerelle = reply.Address.ToString();



long round_trip_time = reply.RoundtripTime;


if (adr_passerelle "") adr_passerelle
"*";



MessageBox.Show(
"reply.Adress test = " + adr_passerelle,
"reply.adress",
MessageBoxButtons.OK,
MessageBoxIcon.Error);

15 réponses

cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
16 févr. 2006 à 11:14
Salut,

Ton problème c'est que reply.Address vaut null, donc l'appel de ToString() échoue.

if ( reply.Address != null )
{
string adr_passerelle = reply.Address.ToString();
long round_trip_time = reply.RoundtripTime; if (adr_passerelle "") adr_passerelle "*";
MessageBox.Show("reply.Adress test = " + adr_passerelle, "reply.adress", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
// ...
}

/*
coq
MVP Visual C#
*/
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 10
16 févr. 2006 à 11:14
Je ne suis pas sur que ton if puisse résoudre le problème : il y a une différence entre 'null' et ""... Le premier concerne un objet, le second une chaine vide.

Je pense plutot que ton erreur viens :
- soit de l'objet 'reply', qui est null lorsque tu arrive à la ligne qui plante
- soit de l'objet 'reply.Address' qui est null lui aussi a ce moment la...

Tu devrais trouver cette erreur très rapidement en débuguant, sinon essaye deja de mettre cela :

adr_passerelle = "*";
if(reply != null)
{
if(reply.Address != null)
{
adr_passerelle = reply.Address.ToString();
}
}

long round_trip_time [...]
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 10
16 févr. 2006 à 11:15
(arf pas assez rapide ^^)
0
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
16 févr. 2006 à 11:20
4s de différence...je crois qu'on a pas fait pire encore ;-)

Sinon effectivement je n'ai pas penser à reply, ça me parressait évident qu'il ne soit pas null mais ça peut être le cas.
Cependant ton test peut être raccourci :
if(reply != null)
{
if(reply.Address != null)
{
adr_passerelle = reply.Address.ToString();
}
}

devient

if(reply != null && reply.Address != null)
{
adr_passerelle = reply.Address.ToString();
}

:-)

/*
coq
MVP Visual C#
*/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
billut Messages postés 74 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 5 décembre 2008
16 févr. 2006 à 11:30
Voici mon code en un peu plus complet :
args cest l'argument que je met, l'adresse Ip de destination..
Le probleme cest dans le Else, il faudrait que j'arrive a mettre que le reply.Adress soit égal a "*" et non a null

if (reply.Address !=
null)


{



string adr_passerelle = reply.Address.ToString();
//adresse de passerelle



long round_trip_time = reply.RoundtripTime;
//durée en ms de la requete ping


if (adr_passerelle "") adr_passerelle
"*";



MessageBox.Show(
"reply.Adresse = "+ adr_passerelle,
"Fin",
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);



if (args == reply.Address.ToString())
break;



if (args == adr_passerelle)
MessageBox.Show(
"args=adresse_passerelle",
"Fin",
MessageBoxButtons.OK,
MessageBoxIcon.Information);


}






else
// reply.adress == null


{



string adr_passerelle = reply.Address.ToString();



long round_trip_time = reply.RoundtripTime;


if (adr_passerelle "") adr_passerelle "*";



MessageBox.Show(
"reply.Adress test = " + adr_passerelle,
"reply.adress",
MessageBoxButtons.OK,
MessageBoxIcon.Error);


}



Ttl++;


options.Ttl += 1;


}

voici lerreur générée :

Merci
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 10
16 févr. 2006 à 11:33
Dans ce cas, si reply.Address est null et que tu ne veux pas qu'il le soit... il te faut le récréer :

Si c'est reply qui est null :
reply = new JeSaisPasQuoi();

Si c'est reply address :
reply.Address = new JeSaisPasQuoi();

Tout dépend du type de replyAddress...
0
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
16 févr. 2006 à 11:34
On ne peut pas voir ton image, elle est locale à ta machine.

/*
coq
MVP Visual C#
*/
0
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
16 févr. 2006 à 11:36
* est censé représenter quoi ?
"N'importe quelle adresse" ?

/*
coq
MVP Visual C#
*/
0
billut Messages postés 74 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 5 décembre 2008
16 févr. 2006 à 11:44
non, * cest pareil que lorsqu'on fait un traceroute sous le shell, lorsque l'on ne peut pas joindre l'hote, ca met *, ici cest pareil, lorsque Reply.Adress == null alors Reply.Adress. devrait prendre cette valeur "*".
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 10
16 févr. 2006 à 11:46
De quel type est ton objet 'reply' ?
0
billut Messages postés 74 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 5 décembre 2008
16 févr. 2006 à 11:50
voici :

Ping pingSender =
new
Ping();

PingOptions options =
new
PingOptions();
options.DontFragment =
true;
options.Ttl = Ttl;

string data =
"bonjour ceci est le string data ";
b
yte[] buffer =
Encoding.ASCII.GetBytes(data);

int timeout = 120;



PingReply reply = pingSender.Send(args, timeout, buffer, options);
0
billut Messages postés 74 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 5 décembre 2008
16 févr. 2006 à 11:50
voici je met tout comme ca..:

Ping pingSender =
new
Ping();

PingOptions options =
new
PingOptions();
options.DontFragment =
true;
options.Ttl = Ttl;

string data =
"bonjour ceci est le string data ";
b
yte[] buffer =
Encoding.ASCII.GetBytes(data);

int timeout = 120;



PingReply reply = pingSender.Send(args, timeout, buffer, options);
0
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
16 févr. 2006 à 11:55
Dans le cas de la commande, * est juste une représentation graphique.
Une instance d'IPAddress ne peut pas prendre cette valeur, par contre tu peux probablement te servir du champs statique None pour représenter *.

/*
coq
MVP Visual C#
*/
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 10
16 févr. 2006 à 11:59
reply.Address est de type IpAddress, donc tu peux essayer cela :

if(reply.Address == null)
{
reply.Address = new IPAddress(IPAddress.Broadcast);
}

Ce qui te metra une adresse de broadcast...

Mais je ne sais pas si c'est que tu cherches en fait.... Tu ne peux pas mettre "*" dans une adresse IP. Si le "*" te sert a détecter comme tu le dis que l'hote n'est pas joignable... et bien dans ce cas laisse ton code comme il est :

si reply.Address == null >> alors l'hote n'est pas joignable et tu fait le traitement que tu dois faire dans ce cas.
0
billut Messages postés 74 Date d'inscription lundi 23 mai 2005 Statut Membre Dernière intervention 5 décembre 2008
16 févr. 2006 à 12:03
est-ce que tu peux m'expliquer un peu plus ? dsl de t'embéter avec tout ca, mais moi et la programmation ca fait plus de 2...merci
0