IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Web et réseau
        Comment obtenir les adresses IP d'un ordinateur ?
        Comment vérifier la validité d'une adresse IP ?
        Comment envoyer un mail par SMTP ?
        Comment télécharger et afficher le contenu d'une page web ?
        Comment savoir si mon PC est connecté à internet ?
         Comment vérifier si une machine est accessible ?
        Comment connaître la liste des adresses Ip de la machine ?
        Comment récupérer la liste des ordinateurs connectés au réseau ?
        Comment récupérer le contenu d'une page Web ?
        Comment appeler une méthode Web sans attendre de réponse du serveur ?
        6.1. Windows Communication Foundation (3)
                Comment publier une instance particulière d'un objet ?
                Comment publier un objet par client ?
                Comment publier un objet qui ne sert qu'une fois ?



Comment obtenir les adresses IP d'un ordinateur ?
auteurs : abelman, freegreg
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.

          
		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;
        }

        
lien : fr System.Net.Dns (MSDN)

Comment vérifier la validité d'une adresse IP ?
auteurs : pharaonix, abelman, tomlev
Avec la méthode IPAddress.TryParse

          
		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 :

          
		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;
		}
          
        
lien : fr System.Net.IPAddress.TryParse (MSDN)

Comment envoyer un mail par SMTP ?
auteurs : abelman, neguib, 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:

          
        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 fr 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 :

          
        //...
        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) :

<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.

lien : fr System.Web.Mail (MSDN)
lien : fr System.Net.Mail (MSDN)

Comment télécharger et afficher le contenu d'une page web ?
auteurs : pharaonix, abelman
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

          
	using System.Net;
	using System.IO;

        
Le code suivant utilise une Form avec un contrôle TexBox nommé textBox1, un contrôle RichTextBox nommé richTextBox1 et un contrôle Button nommé button1.

          
        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();
            }
        }

        
lien : fr HttpWebRequest (MSDN)
lien : fr HttpWebResponse
lien : fr StreamReader

Comment savoir si mon PC est connecté à internet ?
auteur : Thomas Lebrun
On se sert de la fonction InternetGetConnectedState de la dll win32 wininet.dll

          
		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 ) ;
		}

        
lien : en A propos de WinInet (MSDN)
lien : en InternetGetConnectedState (MSDN)

Comment vérifier si une machine est accessible ?
auteur : cardi
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 = 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

lien : fr Article de webman sur les nouveautés de .NET 2.0
lien : fr System.Net.NetworkInformation.Ping (MSDN)

Comment connaître la liste des adresses Ip de la machine ?
auteur : cardi
La classe IPHostEntry permet de connaître la liste de IP via la propriété AddressList :

          
      // 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());
      
        
lien : fr System.Net.Dns (MSDN)

Comment récupérer la liste des ordinateurs connectés au réseau ?
auteur : NicolasJolet

          
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();
    }
}
      
        

Comment récupérer le contenu d'une page Web ?
auteur : cardi
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.

          
// 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(); 
}
        
lien : fr System.Net.WebRequest (MSDN)
lien : fr System.Net.WebResponse (MSDN)

Comment appeler une méthode Web sans attendre de réponse du serveur ?
auteur : Mehdi Feki
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.


          
    [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);
    }

        


Consultez les autres F.A.Q's


Valid XHTML 1.0 TransitionalValid CSS!

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 © 2010 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.