IPEndPoint(IPAddress.Any, 0)的意思

 

IPEndPoint(IPAddress.Any, 0)
If creates an IPEndpoint using any available IP address on the local computer, and any available port number.

IPAddress.Any代表本机上的所有IP地址,MSDN上说是“一个 IP 地址,指示服务器应侦听所有网络接口上的客户端活动”,0就代表所有可用端口了。

如:一台机器(服务器)的IP为:192.168.0.1,通过拨号上网后,又产生一个地址为:220.58.17.25<动态IP>(绑定域名为www.123456.com),现在的问题是,如果侦听的地址为192.168.0.1时,外部的客户端就无法连接到服务器(用www.123456.com),提示为极积拒绝,,这个可以理解.当侦听的地址为220.58.17.25时,外部客户端连接(用www.123456.com)服务器端没有问题,但局域网就无法连接(192.168.0.1)到服务器,必须改为(www.123456.com)才能连接,但用Windows的远程桌面时他都是通的,也就是局域网不论是用www.123456.com还是192.168.0.1都能连接.有什么办法让局域网客户端连接时,不论服务器的侦听哪个地址。就如远程面桌一样,同样,只要服务器连网后,外网也能连接到服务器(www.123456.com)。

 

这是我目前的方法(但不能实现,侦听哪个地址,就只能连接哪个地址):

/// <summary>

/// 获取服务器名称或IP

/// </summary>

/// <returns></returns>

public static IPAddress GetServerIP()

{

      IPHostEntry ieh = Dns.GetHostByName(Dns.GetHostName());

   

      return ieh.AddressList[0];   //设置地址列表(局域网还是外网)

     

}

 

服务器端侦听时,同时打开服务器所有网络接口上的指定端口(如:127.0.0.1,192.168.0.1,

220.58.17.25等等),这样局域网内部客户端连接服务器是可用192.168.0.1的地址,外部客户端可用服务器的外部地址220.58.17.25或域名连接服务器.

如果局域网通过域名访问服务器时,要求最终定向的IP为192.168.0.1,那么就需要在网域网内部做一个域名解析,将域名指定服务器的内网IP

下面的代码是同时侦听所有接口指定端口的例子

Socket ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

IPEndPoint iep = new IPEndPoint(IPAddress.Any, _LocalPort);

_ServerSocket.Bind(iep);

_ServerSocket.Listen(5);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值