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
Sommaire→Intéraction du C++/CLI avec le framework .Net→RéseauAvec 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



