none
菜鸟问题: 如何通过DNS解析域名后得到多个IP地址 RRS feed

  • 问题

  • 本人菜鸟接触C#不久,刚写了个简单的DNS解析为IP地址的winform, 在域名输入框中输入域名, 但是输出结果试过了listView和listBox都不能显示,改用RichTxtBox也只能显示出一个IP地址,如果遇到sina.com这样的一个域名多个IP的情况就不能全部显示了,但是我用了foreach来遍历,写了个Console.Writeline()就可以显示多行,每个IP对应一行,但是在listView就不行,求在Winform下的listView或者listBox中显示的方法,谢谢大家!

    能显示所有IP地址的控制台应用程序代码如下:

                Using System.Net;

                IPHostEntry hostInfo = Dns.GetHostEntry("www.sina.com.cn");
                foreach(IPAddress address in hostInfo .AddressList)
                Console.WriteLine(address.ToString());
                Console.ReadLine();

    运行结果如下:
    221.236.31.149
    221.236.31.150
    221.236.31.151
    221.236.31.152
    221.236.31.140
    221.236.31.141
    221.236.31.142
    221.236.31.143
    221.236.31.144
    221.236.31.145

    使用nslookup命令查看结果一致。


    在Winform中:
    DNSListBox是域名的输入框 textBox , 输出结果是在名称为IPlistVIew的listView控件中显示,要求是每一个IP排列一行显示。



     private void SwitchDNS_Click(object sender, EventArgs e)
            {
                IPHostEntry hostInfo = Dns.GetHostEntry(DNSListBox.Text);

                foreach (IPAddress address in hostInfo.AddressList)
                {
                   //此处代码如何写?
                }
            }



    再次谢谢大家!

    2009年7月16日 7:15

答案

  •         private void Form1_Load(object sender, EventArgs e)
            {
                IPHostEntry hostInfo = Dns.GetHostEntry("www.sina.com.cn");
                foreach (IPAddress address in hostInfo.AddressList)
                    this.IPlistVIew.Items.Add(address.ToString());
     
                
            }

    答案900, 目标五颗星 Aurvana Air, 音乐真的是随风飘来的 凉宫春日 永无止境的八月 你到底什么时候结束阿。。。。
    2009年7月16日 7:22
    版主

  •  private void SwitchDNS_Click(object sender, EventArgs e)
            {
                string ips=string.Empty;
                IPHostEntry hostInfo = Dns.GetHostEntry(DNSListBox.Text);           
                 foreach (IPAddress address in hostInfo.AddressList)
                {
                   ips+=address.ToString()+"\r\n";

                }

                textBox.Text=ips;
            }
    2009年7月16日 14:07
  • 补充一下,还需要将TextBox的MultiLine属性设置为True
    2009年7月16日 15:49
  • 你把listview 的显示模式增加一个col  改成 detail style就可以了
    答案900, 目标五颗星 Aurvana Air, 音乐真的是随风飘来的 凉宫春日 永无止境的八月 你到底什么时候结束阿。。。。
    • 已标记为答案 Bowen Deng 2009年7月17日 3:26
    2009年7月17日 2:47
    版主
  • 哈,先恭喜问题已解决。看来我晚了一步。
    我想您所说的情况,应该是没在文本框上设置高度,只有一行的高度,只能显示一行。您可以将文本框拖高。
    就算是一个补充吧。
    别忘了追加帮助您搞定问题的人。这个是有积分的。当作对帮助您的人的一个小礼物。:)
    2009年7月17日 3:27

全部回复

  •         private void Form1_Load(object sender, EventArgs e)
            {
                IPHostEntry hostInfo = Dns.GetHostEntry("www.sina.com.cn");
                foreach (IPAddress address in hostInfo.AddressList)
                    this.IPlistVIew.Items.Add(address.ToString());
     
                
            }

    答案900, 目标五颗星 Aurvana Air, 音乐真的是随风飘来的 凉宫春日 永无止境的八月 你到底什么时候结束阿。。。。
    2009年7月16日 7:22
    版主
  • 测试了一下韦恩卑鄙 的方法可以显示,这个代码我前面也曾经写过,就是不能实现一个IP一行的显示方式,怎样做到1行显示1个IP呢?这个不行用其他什么方法可以实现呢?
    2009年7月16日 7:26

  •  private void SwitchDNS_Click(object sender, EventArgs e)
            {
                string ips=string.Empty;
                IPHostEntry hostInfo = Dns.GetHostEntry(DNSListBox.Text);           
                 foreach (IPAddress address in hostInfo.AddressList)
                {
                   ips+=address.ToString()+"\r\n";

                }

                textBox.Text=ips;
            }
    2009年7月16日 14:07
  • 补充一下,还需要将TextBox的MultiLine属性设置为True
    2009年7月16日 15:49
  • 按照你的方法,使用了textBox控件来显示IP,但是测试后还是只能显示一个IP,尽管已经将TextBox的MultiLine属性设置为True了,请问你能留下一个联系方式吗?希望能够直接请教你,谢谢!
    2009年7月17日 2:39
  • 你把listview 的显示模式增加一个col  改成 detail style就可以了
    答案900, 目标五颗星 Aurvana Air, 音乐真的是随风飘来的 凉宫春日 永无止境的八月 你到底什么时候结束阿。。。。
    • 已标记为答案 Bowen Deng 2009年7月17日 3:26
    2009年7月17日 2:47
    版主
  • 搞定!非常感谢!我发现好几次你都是在我危难之时现身,人才啊!!!
    其实早上的时候我曾经试过增加一个col并且改成了detail方式的,但是当时不知道为什么没成功,按照你的方法重新写了一次,就对了!再次感谢!

    2009年7月17日 3:10
  • 搞定!非常感谢!我发现好几次你都是在我危难之时现身,人才啊!!!
    其实早上的时候我曾经试过增加一个col并且改成了detail方式的,但是当时不知道为什么没成功,按照你的方法重新写了一次,就对了!再次感谢!

    2009年7月17日 3:12
  • 不用客气 缘分阿兄弟

    正好昨天写了一个listview的应用 记忆特别深


    答案900, 目标五颗星 Aurvana Air, 音乐真的是随风飘来的 凉宫春日 永无止境的八月 你到底什么时候结束阿。。。。
    2009年7月17日 3:17
    版主
  • 哈,先恭喜问题已解决。看来我晚了一步。
    我想您所说的情况,应该是没在文本框上设置高度,只有一行的高度,只能显示一行。您可以将文本框拖高。
    就算是一个补充吧。
    别忘了追加帮助您搞定问题的人。这个是有积分的。当作对帮助您的人的一个小礼物。:)
    2009年7月17日 3:27
  • 放心  就算他忘记了还有我在
    答案900, 目标五颗星 Aurvana Air, 音乐真的是随风飘来的 凉宫春日 永无止境的八月 你到底什么时候结束阿。。。。
    2009年7月17日 3:34
    版主
  • 高人,你知道等待答案和自我摸索的过程是非常痛苦的,很想以后更多的请教你的想法由来已久,为了减少别人对你的打扰能往我的邮箱 cqdengdeng@gmail.com 里发一个你的联系方式吗?邮箱也行,一般情况下不打扰。谢谢!

    2009年7月17日 3:45
  • 放心  就算他忘记了还有我在
    答案900, 目标五颗星 Aurvana Air, 音乐真的是随风飘来的 凉宫春日 永无止境的八月 你到底什么时候结束阿。。。。

    哈,多谢版主了。我的本意,本不是说我,因为帮他搞定问题的人是你。:)
    2009年7月17日 4:21
  • 通过这次对控件了解了一些,现在的问题是DNS查询正常,也可以多行显示了,但是在查询了第一次之后再运行第二次查询的时候,原有的结果不消失还保留在那里,比如先查询了sina后再查询sohu,原有的sina的结果不能清空,无法实现只显示第二次查询的结果。

    现在采取了一个折中的方法,添加了一个button,执行一个 Items.Clear() 的方法来手动清除原有的查询结果,可以满足要求,再次谢谢大家的帮忙,祝各位周末愉快!
    2009年7月17日 4:50