FAQ C#Consultez toutes les FAQ

Nombre d'auteurs : 39, nombre de questions : 272, dernière mise à jour : 24 mai 2015  Ajouter une question

 

Cette FAQ a été réalisée pour répondre aux questions les plus fréquemment posées concernant C# sur le forum Développement DotNET

Je tiens à souligner qu'elle ne garantit en aucun cas que les informations qu'elle contient sont correctes ; les auteurs font le maximum, mais l'erreur est humaine. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, lisez ceci .

Sur ce, je vous souhaite une bonne lecture.

Commentez cette FAQ : Commentez


SommaireWeb et réseau (13)
précédent sommaire suivant
 

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. Pour avoir les adresses IP de l'ordinateur local il suffit de l'appeler sans paramètre.

Code c# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System.Net; 
  
string[] GetIPaddresses(string computername) 
{ 
    string[] saddr = null; 
    IPAddress[] addr = Dns.Resolve(computername).AddressList; 
  
    if (addr.Length > 0) 
    { 
        saddr = new String[addr.Length]; 
        for (int i = 0; i < addr.Length; i++) 
            saddr[i] = addr[i].ToString(); 
    } 
    return saddr; 
}

Mis à jour le 2 novembre 2004 abelman freegreg

Avec la méthode IPAddress.TryParse

Code c# : Sélectionner tout
1
2
3
4
5
public bool CheckIpAddr(string ipAddress) 
{ 
    IPAddress ip; 
    return System.Net.IPAddress.TryParse(ipAddress, out ip); 
}
En .NET 1.1, la méthode IPAddress.TryParse n'existe pas, mais on peut obtenir manuellement le même résultat :

Code c# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
public bool CheckIpAddr(string ipAddress) 
{ 
    string[] parts = ipAddress.Split('.'); 
    if (parts.Length != 4) 
        return false; 
    foreach(string part in parts) 
    { 
        byte n; 
        if (!byte.TryParse(part, out n)) 
        return false; 
    } 
    return true; 
}

Mis à jour le 2 novembre 2004 abelman Louis-Guillaume Morand tomlev

Version 1.0 et 1.1
Il faut ajouter à son projet la référence System.Web.Mail (qui aurait dû s'appeler System.Net.Mail à mon avis).
Ensuite ça se fait tout seul. Exemple:

Code c# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static void Main(string[] args) 
{ 
    // Objet mail 
    MailMessage msg = new MailMessage(); 
    // Expéditeur (obligatoire) 
    msg.From = "expediteur@free.f"; 
    // destinataire (il en faut au moins un) 
    msg.To = "atoi@free.fr;alui@free.fr"; 
    // destinataires en copie (facultatif) 
    msg.Cc = "encoreatoi@free.fr"; 
    // Texte du mail (facultatif) 
    msg.Body = "Bonjour\n" + 
    "Ceci est le contenu du mail\n" + 
    "A bientôt"; 
    // Fichier joint si besoin (facultatif) 
    msg.Attachments.Add(new MailAttachment(@"c:\fichierjoint.txt", MailEncoding.UUEncode)); 
    // Serveur SMTP 
    SmtpMail.SmtpServer = "smtp.nerim.fr"; 
    // Envoi du mail 
    SmtpMail.Send(msg); 
}
J'attire votre attention sur un point : les exceptions levées par la fonction SmtpMail.Send en cas d'échec, ne sont pas toujours très explicites!!
N'hésitez pas à consulter MSDN sur la classe System.Web.Mail.MailMessage. Elle dispose de nombreuses autres propriétés.
Il y a aussi l'excellent article de Webman

Version 2.0
A partir de .NET 2.0, les classes du namespace System.Web.Mail ont été rendues obsolètes, et remplacées par de nouvelles classes dans le namespace System.Net.Mail. Il est désormais recommandé d'utiliser ces classes à la place des anciennes. Elles s'utilisent presque de la même façon, mais offrent plus de fonctionnalités. L'envoi du message se fait à l'aide de la classe SmtpClient.
Voici un exemple :

Code c# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//... 
using System.Net; 
using System.Net.Mail; 
//... 
  
[STAThread] 
static void Main(string[] args) 
{ 
    // Objet mail 
    MailMessage msg = new MailMessage(); 
  
    // Expéditeur (obligatoire). Notez qu'on peut spécifier le nom 
    msg.From = new MailAddress("john.doe@gmail.com", "John Doe"); 
  
    // Destinataires (il en faut au moins un) 
    msg.To.Add(new MailAddress("jack.sparrow@blackpearl.com", "Jack Sparrow")); 
    msg.To.Add(new MailAddress("agent.smith@matrix.com", "Agent Smith")); 
  
    // Destinataire(s) en copie (facultatif) 
    msg.Cc.Add(new MailAddress("wonder.woman@superhero.com", "Wonder Woman")); 
  
    // Texte du mail (facultatif) 
    msg.Body = "Bonjour\n" + 
    "Ceci est le contenu du mail\n" + 
    "A bientôt"; 
  
    // Fichier joint si besoin (facultatif) 
    msg.Attachments.Add(new Attachment(@"c:\fichierjoint.txt")); 
  
    // Envoi du message SMTP 
    SmtpClient client = new SmtpClient("smtp.gmail.com", 587); 
    client.EnableSsl = true; 
    client.Credentials = new NetworkCredentials("john.doe@gmail.com", "mon_mot_de_passe"); 
  
    // Envoi du mail 
    client.Send(msg);}
Notez que le code ci-dessus suppose que le serveur SMTP est sécurisé (SSL), requiert une authentification et écoute sur le port 587. Si votre serveur SMTP écoute sur le port standard (25), vous pouvez omettre le paramètre "port" du constructeur de SmtpClient. Si vous n'utilisez pas SSL, ne mettez pas EnableSsl à true. Et si le serveur ne requiert pas d'authentification, inutile de spécifier le login et mot de passe dans la propriété Credentials...

Enfin, notez qu'il est possible de spécifier les paramètres du serveur dans le fichier de configuration de l'application (web.config ou app.config) :

Code xml : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration> 
  <system.net> 
    <mailSettings> 
      <smtp deliveryMethod="network"> 
        <network 
          host="smtp.domaine.com" 
          port="25" 
          userName="mon_login" 
          password="mon_mot_de_passe" 
        /> 
      </smtp> 
    </mailSettings> 
  </system.net> 
</configuration>
De cette manière, lorsqu'on crée une instance de SmtpClient, elle est automatiquement configurée avec les paramètres du fichier de configuration.

N'hésitez pas à consulter ce tutoriel sur l'envoi et la réception d'emails en .NET 2.0.

Mis à jour le 2 novembre 2004 abelman neguib tomlev

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.

Namespaces à utiliser

Code c# : Sélectionner tout
1
2
using System.Net; 
using System.IO;
Le code suivant utilise une Form avec un contrôle TextBox nommé textBox1, un contrôle RichTextBox nommé richTextBox1 et un contrôle Button nommé button1.

Code c# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void button1_Click(object sender, System.EventArgs e) 
{ 
    HttpWebResponse HttpWResponse = null; 
    StreamReader sr = null; 
    try 
    { 
        HttpWebRequest HttpWRequest = (HttpWebRequest)WebRequest.Create(textBox1.Text); 
        HttpWResponse = (HttpWebResponse)HttpWRequest.GetResponse(); 
        sr = new StreamReader(HttpWResponse.GetResponseStream()); 
        richTextBox1.Text = sr.ReadToEnd(); 
    } 
    catch (Exception ex) 
    { 
        MessageBox.Show(ex.Message); 
    } 
    finally 
    { 
        if (HttpWResponse != null) 
            HttpWResponse.Close(); 
        if (sr != null) 
            sr.Close(); 
    } 
}

Mis à jour le 2 novembre 2004 abelman Louis-Guillaume Morand

On se sert de la fonction InternetGetConnectedState de la dll win32 wininet.dll

Code c# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
using System.Runtime.InteropServices; 
  
// Déclaration de l'API 
[DllImport("wininet.dll")] 
public extern static bool InternetGetConnectedState( out int Description, int ReservedValue ) ; 
  
// Utilisation de l'API 
public static bool IsConnected() 
{ 
    int Desc ; 
    return InternetGetConnectedState( out Desc, 0 ) ; 
}

Mis à jour le 2 novembre 2004 Thomas Lebrun

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 :

Code c# : Sélectionner tout
1
2
3
4
5
// Pinguer un machine 
Ping monPing = new Ping(); 
PingReply Reply = monPing.Send("192.168.1.31"); 
  
Console.WriteLine("Statut du ping : {0}", Reply.Status);

Veillez toutefois à activer NetworkInformationPermission pour votre application, sans cela vous obtiendrez une exception de sécurité SecurityException

Mis à jour le 2 janvier 2007 Jérôme Lambert

La classe IPHostEntry permet de connaître la liste de IP via la propriété AddressList :

Code c# : Sélectionner tout
1
2
3
4
5
6
7
8
9
// Nom de la machine 
String NomMachine = Dns.GetHostName(); 
  
// Récupération de la liste des IP de la machine 
IPHostEntry InfoIps = Dns.GetHostEntry(NomMachine); 
IPAddress[] MesIp = InfoIps.AddressList; 
  
foreach (IPAddress CurrentIp in MesIp) 
    Console.WriteLine("Ip : {0}", CurrentIp.ToString());

Mis à jour le 2 janvier 2007 Jérôme Lambert

Code c# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
class Program 
{ 
    [StructLayout(LayoutKind.Sequential)] 
    public struct _SERVER_INFO_100 
    { 
        internal int sv100_platform_id; 
        [MarshalAs(UnmanagedType.LPWStr)] 
        internal string sv100_name; 
    } 
  
    [DllImport("Netapi32", SetLastError = true), SuppressUnmanagedCodeSecurityAttribute] 
    public static extern int NetApiBufferFree(IntPtr pBuf); 
  
    [DllImport("Netapi32", CharSet = CharSet.Auto, SetLastError = true), SuppressUnmanagedCodeSecurityAttribute] 
    public static extern int NetServerEnum( 
        string ServerNane, 
        int dwLevel, 
        ref IntPtr pBuf, 
        int dwPrefMaxLen, 
        out int dwEntriesRead, 
        out int dwTotalEntries, 
        int dwServerType, 
        string domain, 
        out int dwResumeHandle 
        ); 
  
    const int LVL_100 = 100; 
    const int MAX_PREFERRED_LENGTH = -1; 
    const int SV_TYPE_WORKSTATION = 1; 
    const int SV_TYPE_SERVER = 2; 
  
    /// <summary> 
    /// Cette fonction est tirée d'une source trouvée ici => http://www.codeproject.com/cs/internet/ListNetworkComputers.asp 
    /// </summary> 
    public static string[] GetComputers() 
    { 
        ArrayList computers = new ArrayList(); 
        IntPtr buffer = IntPtr.Zero, tmpBuffer = IntPtr.Zero; 
        int entriesRead, totalEntries, resHandle; 
        int sizeofINFO = Marshal.SizeOf(typeof(_SERVER_INFO_100)); 
  
        try 
        { 
            int ret = NetServerEnum(null, LVL_100, ref buffer, MAX_PREFERRED_LENGTH, out entriesRead, out totalEntries, SV_TYPE_WORKSTATION | SV_TYPE_SERVER, null, out resHandle); 
            if (ret == 0) 
            { 
                for (int i = 0; i < totalEntries; i++) 
                { 
                    tmpBuffer = new IntPtr((int)buffer + (i * sizeofINFO)); 
  
                    _SERVER_INFO_100 svrInfo = (_SERVER_INFO_100)Marshal.PtrToStructure(tmpBuffer, typeof(_SERVER_INFO_100)); 
                    computers.Add(svrInfo.sv100_name); 
                } 
            } 
            else 
                throw new Win32Exception(ret); 
        } 
        finally 
        { 
            NetApiBufferFree(buffer); 
        } 
  
        return (string[])computers.ToArray(typeof(string)); 
    } 
  
    static void Main(string[] args) 
    { 
        string[] computers = GetComputers(); 
  
        foreach (string computer in computers) 
        { 
            Console.WriteLine(computer); 
        } 
        Console.Read(); 
    } 
}

Mis à jour le 25 mars 2007 emmental

Les classes WebRequest et WebResponse vous permettent respectivement de créer des requêtes HTTP et récupérer les résultats de celles-ci.

Code c# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Création de la requête 
System.Net.WebRequest objWebRequest = System.Net.HttpWebRequest.Create("http://dotnet.developpez.com"); 
// Envoi de la requête au serveur 
System.Net.WebResponse objWebResponse = objWebRequest.GetResponse(); 
  
// Stream pour récupérer le résultat 
System.IO.StreamReader objStreamReader = null; 
  
try 
{ 
    // Récupération du résultat 
    objStreamReader = new System.IO.StreamReader(objWebResponse.GetResponseStream()); 
  
    // Lecture du résultat 
    textBox_Resultat.Text = objStreamReader.ReadToEnd(); 
} 
catch 
{ } 
finally 
{ 
    // Fermeture de la connexion 
    if (objWebResponse != null) 
        objWebResponse.Close();  
}

Mis à jour le 10 juin 2008 Jérôme Lambert

Dans certains cas, le client ne veut pas attendre une réponse du serveur après avoir appelé un service Web. L'attribut OneWay indique au serveur que le client ne veut pas recevoir d'acquittements et que sa tâche s'arrête à l'appel de la méthode Web.

Code c# : Sélectionner tout
1
2
3
4
5
6
7
8
9
[SoapDocumentMethod(OneWay = true)] 
//[SoapRpcMethod(OneWay=true)] 
[WebMethod(Description = "Comment appeler une méthode Web sans attendre une réponse du serveur ?")] 
public void SaveToLog(string logEntry) 
{ 
    EventLog FaqLog = new EventLog("OneWayAttributeDemo"); 
    FaqLog.Source = "OneWayAttributeDemo"; 
    FaqLog.WriteEntry(logEntry, EventLogEntryType.Information); 
}

Mis à jour le 10 juin 2008 Mehdi Feki

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsable bénévole de la rubrique Microsoft DotNET : Hinault Romaric -