воскресенье, 14 августа 2011 г.

C# Получение IP адреса по имени

На C# есть несколько способов получения адреса по имени хоста. Самым распространённым является обработка возвращенного адреса после пинга
            Ping p = new Ping();

            PingReply pr = p.Send(hostname);
 
            if (pr.Status == IPStatus.Success)
            {
                return pr.Address;
            }
Но данный подход не верен! Так как хост может 
  1. Иметь более одного IP адреса
  2. Вообще не отвечать на ICMP пакеты
  3. Выполняется с достаточно большой задержкой (частично нивелируется применением асинхронной версии)
Для обхода данных проблем нужно воспользоваться более правильным подходом -
        private void button1_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
 
            IPAddress[] ipad = GetIP(textBox1.Text);
 
            foreach (IPAddress ip in ipad){
                listBox1.Items.Add(ip.ToString());
            }
        }
 
        private static IPAddress[] GetIP(string hostname)
        {
            IPAddress[] ips;
            ips = Dns.GetHostAddresses(hostname);
 
            return ips;
        }


Комментариев нет:

Отправить комментарий