C#获取外网IP

发布时间:2024-11-05 13:38 发布:上海旅游网

问题描述:

做一个C/S程序,客户端和服务器之间可以通过外网相互连接进行通信
遇到的问题是客户端如何获取本机的外网IP
还有客户端如果用路由器、交换机上网
服务器连接客户端时,怎么访问客户端,只知道外网IP应该不能访问吧?
是不是外网IP和内网IP都要知道啊
具体用什么实现,谁知道帮忙解决一下!
帮忙解决了可以加分啊!

问题解答:

客户端如果用路由器、交换机上网,服务器要连接客户端,需要在路由器里面设置,路由器里面有个功能,可以让外网访问路由的IP时候,自动转到内网某台机器上,这样就可以通过外网访问内网的机器了。该功能就是路由的DMZ主机功能,在里面填入需要被外网访问机器的IP,这样就跟内网IP没有关系了,你只要关心外网IP就可以。
至于这路由外网的IP是多少就不能自动获知了,除非你电信专门给你分配了一个IP地址,否则你只有手动在路由器的运行状态里面查看到WAN口(外网)的IP了。

你的那程序,我建议就是专门做个模块,用来设置IP,你在路由里面查看到外网IP后,填到里面去(电信动态分配的IP,一天是不会改变的)。

/// <summary>
/// c/s得到外面IP
/// </summary>
/// <returns></returns>
public static string GetLocalIP()
{
System.Net.IPAddress[] ip=Dns.Resolve(Dns.GetHostName()).AddressList;
string result="";
for(int i=0;i<ip.Length;i++)
{
if(ip[i].ToString().Substring(0,3)!="10."&&ip[i].ToString().Substring(0,7)!="192.168"&&ip[i].ToString().Substring(0,7)!="172.16.")
{
result=ip[i].ToString();
break;
}
}
return result;
}
以上方法如果是路由器上网就不行,也有方法解决。就是用正则表达式去专门查IP地址的网站上去取。

Request.UserHostAddress.ToString();

这就是,如果你是自己调试的话就是127.0.0.1
但是架好后就是外网了。

cc

热点新闻