FAQ C++/CLI et VC++.Net
FAQ C++/CLI et VC++.NetConsultez toutes les FAQ
Nombre d'auteurs : 29, nombre de questions : 248, création le 22 février 2013
Avec les expressions régulières.
On utilise le namespace System::Text::RegularExpressions.
bool
CheckIpAddr(String ^
ipAddress)
{
String ^
re =
"^(25[0-5]|2[0-4]
\\
d|[0-1]?
\\
d?
\\
d)(
\\
.(25[0-5]|2[0-4]
\\
d|[0-1]?
\\
d?
\\
d)){3}$"
;
return
System::Text::RegularExpressions::Regex::
IsMatch(ipAddress, re);
}
Version sans expression régulière.
On se sert de la fonction Split de la classe String pour parser la chaine, puis on analyse les différentes sous-chaînes.
bool
CheckIpAddrNoRegex( String ^
ipAddress )
{
if
( ipAddress ==
nullptr
||
ipAddress ==
""
)
return
false
;
array<
String^>
^
ipPartList =
ipAddress->
Split('.'
);
if
( ipPartList->
Length !=
4
)
return
false
;
try
{
unsigned
char
ipPartNumber =
Convert::
ToByte(ipPartList[0
]);
ipPartNumber =
Convert::
ToByte(ipPartList[1
]);
ipPartNumber =
Convert::
ToByte(ipPartList[2
]);
ipPartNumber =
Convert::
ToByte(ipPartList[3
]);
}
catch
( Exception ^
) {
return
false
; }
return
true
;
}
Pour obtenir les adresses IP d'un ordinateur on utilise la fonction Resolve de la Classe System::Net::Dns.
Voici une petite fonction qui le fait :
array<
String ^>
^
GetIPaddresses(String ^
computername)
{
array<
String ^>
^
saddr;
array<
IPAddress ^>
^
addr =
Dns::
GetHostEntry(computername)->
AddressList;
if
(addr->
Length >
0
)
{
saddr =
gcnew array<
String^>
(addr->
Length);
for
(int
i =
0
; i <
addr->
Length; i++
)
saddr[i] =
addr[i]->
ToString();
}
return
saddr;
}
On utilise les classes HttpWebRequest, HttpWebResponse qui encapsulent la communication socket du protocole HTTP. On utilise ensuite la classe StreamReader pour lire le flux de la réponse.
HttpWebResponse ^
HttpWResponse;
StreamReader ^
sr;
try
{
HttpWebRequest ^
HttpWRequest =
safe_cast<
HttpWebRequest ^>
(WebRequest::
Create("http://www.developpez.com"
));
HttpWRequest->
CachePolicy =
gcnew Cache::
HttpRequestCachePolicy(Cache::HttpRequestCacheLevel::
Reload);
HttpWResponse =
safe_cast<
HttpWebResponse^>
(HttpWRequest->
GetResponse());
sr =
gcnew StreamReader(HttpWResponse->
GetResponseStream());
richTextBox1->
Text=
sr->
ReadToEnd();
}
catch
(Exception ^
ex)
{
Console::
WriteLine(ex->
Message);
}
finally
{
if
(HttpWResponse !=
nullptr
)
HttpWResponse->
Close();
if
(sr !=
nullptr
)
sr->
Close();
}
Remarque : on utilise ici la propriété Reload du namespace Cache pour ne pas se servir du cache.
Avec la version 2 du Framework, la classe Ping est apparue permettant de faire la même chose que la commande ping utilisée sous Dos :
// Pinguer un machine
Ping ^
monPing =
gcnew Ping();
PingReply ^
Reply =
monPing->
Send("192.168.0.1"
);
Console::
WriteLine("Statut du ping : {0}"
, Reply->
Status);
Lien : Voir l'article de Webman
Lien : System.Net.NetworkInformation.Ping