急,高分求解Winsock的LocalIP属性问题。在线等,问题一解决100分立即送上。
    我在一个程序中要用到Winsock控件的LocalIP属性,但出现如下问题:
    如果在“控制面板”的“网络”设置的“TCP/IP”属性中禁用“DNS”,那么LocalIP属性返回的本机IP地址是正常的,但这时不能正常地上宽带网;如果在“TCP/IP”属性中启用“DNS”,那么上宽带网正常,但用insock控件的LocalIP属性返回的本机IP地址就不正常了,我的计算机的IP是“192.168.1.3”,但LocalIP属性返回的却是“0.0.0.192”。这到底是怎么回事,怎样才能既可以启用DNS,又能使LocalIP属性返回正确的IP地址?
    我在线等着,一解决立却给分。

解决方案 »

  1.   

    winxp下
    没有禁用“DNS”这项,默认的是使用dns
    我也是使用宽带上网,winsock.localip可以得到我的ip地址192.168.0.1你的os是win2000???
      

  2.   

    我的系统是win98。我刚才在windows2000 server试过,现象也是如此。
      

  3.   

    楼主什么系统?
    xp没出现这个问题哦
    msgbox winsock1.localip 为192.16.1.5
    正常上电信的ADSL啊
      

  4.   

    我在下面的两组系统中测试,结果一样:
    1、局域网(不接入宽带网),服务器运行window 2000 server,服务器网卡IP:192.168.0.1。客户机系统为win98,静态IP:192.168.0.3。在客户端,如果不启用DNS,正常。如果启用DNS(主机:192.168.0.1,DNS搜索顺序:192.168.0.1,这样就不正常了,用winsock.localip返回本机IP为"0.0.0.192”。
    2、客户机系统为win98,无服务器,通过宽带网路由器接入宽带网,路由器IP为“192.168.1.1”,客户机如禁用DNS,winsock.localip返回值是正确的本机IP地址,但不能上网。如果启用DNS(主机:192.168.1.1,DNS搜索顺序:192.168.1.1),上网正常,但winsock.localip返回值就不正常了,为“0.0.0.192”。
      

  5.   

    1.用Router,路由模式,不用服务器,我的环境是阿尔卡特交换机,机器xp,2000没问题哦
    2.没98环境
    呵呵
      

  6.   

    其实对于这个问题,其实可以这样解决:只要把计算机的IP设为动态IP,禁用DNS,就既可上网,也可获得正确的IP地址。但我现在要想知道是的有什么办法既启用DNS,又可以获得正确的IP地址,而且也想知道,为什么启用DNS会影响winsock.localip返回的值。
      

  7.   

    补充:这个问题主要出在IP设为静态时且启用DNS时。
      

  8.   

    楼主你可能混淆了再说我也可能会混淆 
    DNS (Domain Name System) 
    启用的话,就不能分配静态IP了(好象是单选的)拨号上网,启用dns,即:自动获取动态ip
    差不多就这样了,嘿嘿
      

  9.   

    昨天通宵研究FTP协议,在对话中有一步要绑定本地IP和服务器IP,我就纳闷怎么实现,很早就知道用了宽带的电脑,用localip都只能得到宽带提供的一个静态IP,用小猫上网的电脑,因为不存在网卡也不用通过服务器登陆,所以只有两个IP,127.0.0.1和一个网上的动态IP,这时再用localip就能得到PASV 获得服务器IP和端口PORT ftp服务器IP + 高低位端口  返回一组信息,其中包含你本机的外网IP最后用instr  分离出 本机动态IP即可如果经常需要获取本机外网IP的朋友,无须找什么组件,利用自己的FTP空间即可实现,只要求一个winsock.ocx(反正你要localip也要winsock,这个要求不过份吧^_^)没有ftp空间的朋友,我可以提供一个客户端给你,直接提取IP到一个字符串,并封装成一个模块供你们调用
      

  10.   

    我的系统XP当服务器时自动获取IP,自动获得DNS(SYGATE共享)一切正常
    做客护端时设置IP和网关与DNS也正常啊
      

  11.   

    yinweihong:
     我不认同你的说法。
     例如在我的局域网中,服务器IP地址设为:192.168.0.1(子网掩码255.255.255.0),各台客户机的IP设为192.168.0.2--192.168.0.40(子网掩码均为255.255.255.0),整个局域网用的都是静态IP地址。
      DNS是域名解释服务,通过设置DNS可以把www.csnd.com等域名解释成IP地址。DNS并不分配IP地址。在我的局域网中,服务器运行在windows2000 server操作系统下,并开通了IIS服务,有自己的多个主页,每个主页都有类似于www.csnd.com的域名。在客户机上,必须启用DNS,才能通过域名访问服务器上的网页,如果禁用DNS,则不能通过域名访问服务器上的网页,只能直接通过IP地址来访问。
      现在的问题出在:我要开发一个“网络管理系统”来管理这个局域网,这个程序要把各个客户机的IP地址发送给服务器,才能服务器来管理客户机。如果禁用DNS,那么这个“网络管理系统”运行正常,但客户机就不能通过域名来访问服务器的网页了。如果启用了DNS,那么这个“网络管理系统”就不正常了,所有客户机发给服务器的IP地址都是错误的“0.0.0.192”。我是通过winsock.localip来获取各客户机的IP地址的,通过调试发现winsock.localip返回的值都是错误的“0.0.0.192”。就这样,要么我的网络管理系统不正常,要么不能通过域名访问网页,二者不能兼容。
      如何解决这个问题呢?
      

  12.   

    winipcfg显示的IP地址总是正常的吗?
      

  13.   

    如果winipcfg返回正确参考:http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=161784
      

  14.   

    参考http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=161784可以获得正确的IP地址,但这是用API来完成的,直接用winsock.localip却不能获得正确的IP地址,如何才能使winsock.localip也返回正确的IP地址?
      

  15.   

    个人认为:也许是Winsock在特定情况下的BUG。因为0.0.0.192根本不是有效的IP,看上去感觉是CopyMemory的时候出问题了 :)