采用Socket方式开发服务器端及客户端的C/S方式。怎样才能动态侦听地址。
如:一台机器(服务器)的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];  //设置地址列表(局域网还是外网)
      
}

解决方案 »

  1.   

    服务器端侦听时,同时打开服务器所有网络接口上的指定端口(如: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);
      

  2.   

    太感谢你了Bote_China() ,结贴!