本文共 2098 字,大约阅读时间需要 6 分钟。
因为做项目的原因,C/S架构中要进行消息传递,以前做的时侯,服务器和客户端都是在一台电脑上,不涉及IP地址的问题,但是产品要发布,此时必须先知道对方的IP地址。
我采用的是本机获取自己的ip地址后,写入数据库,当需要传递消息时,从数据库中读出要传递的服务器或客户端的IP地址,然后将消息传递过去。
第一步,获取本机的IP地址:
如果是通过共享上网,通过NAT转换的,本机是不知道上网出口网关的IP地址的。
我程序里最终是通过,向网外发送一条信息,由对方告知你的出口IP地址,这个很容易实现,你可以自己写个程序放服务器上,也可以调别人的。
GetHostByName ( )方法的返回值时IPHostEntry 对象,此对象的属性 AddressList,是一个IPAddress类型的数组,包含了计算机此时的所有的IP地址信息。在ip01.cs中AddressList [0].Address是固定的IP地址,而对于上网动态分配的IP地址是.AddressList [1].Address。据此我们可以的得到读取拨号上网动态分配的IP地址的源程序:
System.Net.IPAddress addr;// 获得拨号动态分配IP地址addr = new System.Net.IPAddress ( Dns.GetHostByName ( Dns.GetHostName ( ) ) .AddressList [1].Address ) ;return addr.ToString ( ) ; 我们也可以通过设定AddressList的不同值来得到机器不同的IP地址。// 通过外部网站返回得到内网外部IP
// 来源: http://www.cnblogs.com/helloworld84/archive/2005/08/18/218104.html using System; using System.IO; using System.Net; using System.Text; using System.Text.RegularExpressions; class PubIP { static string GetIP() { Uri uri = new Uri("http://www.ikaka.com/ip/index.asp"); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri); req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; req.ContentLength = 0; req.CookieContainer = new CookieContainer(); req.GetRequestStream().Write(new byte [0], 0, 0); HttpWebResponse res = (HttpWebResponse)(req.GetResponse()); StreamReader rs = new StreamReader(res.GetResponseStream(), Encoding.GetEncoding("GB18030")); string s = rs.ReadToEnd(); rs.Close(); req.Abort(); res.Close(); Match m = Regex.Match(s, @"IP:/[(?<IP>[0-9/.]*)/]"); if (m.Success) return m.Groups["IP"].Value; return string.Empty; } static void Main() { Console.WriteLine(GetIP()); } }
同时,我们也可以获取局域网中本机的IP地址:
using System;
using System.IO; using System.Net; using System.Text; using System.Text.RegularExpressions; class HostIP {static void Host() //局域网中获取主机地址
{ string ComputerName = Dns.GetHostName(); IPHostEntry myHost = new IPHostEntry(); myHost = Dns.GetHostEntry(ComputerName); for(int i = 0;i < myHost.AddressList.Length;i++) { Console.WriteLine("{0}",myHost.AddressList[i].ToString()); } } static void Main() { Host(); Console.ReadLine(); } }参考网站: