PB9中通过网址(域名)获取IP的方法

原创 2011年10月27日 10:44:07

    将以下内容保存为本地文件n_cst_ip.sru,然后导入pbl中

$PBExportHeader$n_cst_ip.sru
forward
global type n_cst_ip from nonvisualobject
end type
type s_wsadata from structure within n_cst_ip
end type
type os_hostent from structure within n_cst_ip
end type
end forward

type s_wsadata from structure
    unsignedinteger        version
    unsignedinteger         highversion 
    character        discription[257]
    character        systemstatus[129]
    unsignedinteger        maxsockets
    unsignedinteger        maxupddg
    string         vendorinfo
end type

type os_hostent from structure
    long        hname
    long        haliases
    integer        haddrtype
    integer        hlen
    long        haddrlist
end type

global type n_cst_ip from nonvisualobject autoinstantiate
end type

type prototypes
FUNCTION  int  WSAStartup(  uint  UIVersionRequested,  ref  s_WSAData  lpWSAData  )    library  "wsock32.dll" 
FUNCTION  int  WSACleanup()  library  "wsock32.dll"  
FUNCTION  int  gethostname  (  ref  blob  name,  int  namelen  )  library  "wsock32.dll"  
FUNCTION  uLong  gethostbyname(ref blob  sHost)  Library  "wsock32.dll"  
FUNCTION  uLong  RtlMoveMemory(ref  os_hostent  hpvDest,long  hpvSource,long  cbCopy)  Library  "kernel32.dll"  
FUNCTION  uLong  RtlMoveMemory(ref  uLong  hpvDest,long  hpvSource,long  cbCopy)  Library  "kernel32.dll" 
end prototypes

forward prototypes
public function boolean of_getdnsip (string as_dns, ref string as_ipadress[])
end prototypes

public function boolean of_getdnsip (string as_dns, ref string as_ipadress[]);//函  数:of_GetDNSIp()
//功  能:得到指定域名的IP
//参  数:string as_DNS //域名
//        ref  string as_ipadress[] //返回的ip数组
//返回值:Boolean True/False   
//修改人:yyoinge

string ls_IpAddress[]
int li_IP_Count
s_wsadata l_WSAData
ULong ll_addr, ll_IP, ll_ipaddr, ll_stringip  
int li_version = 257
blob{128} lb_HostName
ulong ll_addr_list
os_hostent lstr_hostent

if wsastartup(li_version, l_WSAData)  =  0 then
    lb_hostname = blob('www.baidu.com')
    ll_addr  =  gethostbyname(lb_HostName)
    RtlMoveMemory(lstr_hostent, ll_addr, 16)
    ll_addr_list  =  lstr_hostent.haddrlist
 
    li_IP_Count  =  0 
    Do While True  
        RtlMoveMemory(ll_IPAddr, ll_addr_list, 4  )
        If ll_IPAddr = 0 Then Exit  
            li_IP_Count = li_IP_Count + 1
            RtlMoveMemory(ll_StringIP,  ll_IPAddr, 1)
            ls_IpAddress[li_IP_Count] = string(ll_StringIP) + "."
            RtlMoveMemory(ll_StringIP, ll_IPAddr + 1, 1)
            ls_IpAddress[li_IP_Count] = ls_IpAddress[li_IP_Count] + string(ll_StringIP) + "."
            RtlMoveMemory(ll_StringIP, ll_IPAddr + 2, 1)
            ls_IpAddress[li_IP_Count] = ls_IpAddress[li_IP_Count] + string(ll_StringIP)+ "."
            RtlMoveMemory(ll_StringIP, ll_IPAddr + 3, 1)
            ls_IpAddress[li_IP_Count] = ls_IpAddress[li_IP_Count] + string(ll_StringIP)
            ll_addr_list = ll_addr_list + 4
    Loop
    WSACleanup() 
End if

as_ipadress = ls_IpAddress

return upperbound(as_ipadress) > 0 //取到IP则返回true
end function

on n_cst_ip.create
call super::create
TriggerEvent( this, "constructor" )
end on

on n_cst_ip.destroy
TriggerEvent( this, "destructor" )
call super::destroy
end on

程序中这样调用即可:
n_cst_ip ln
string ls_dsn = 'www.baidu.com',ls[]
if ln.of_getdnsip(ls_dsn, ls) then
    long i
    for i = 1 to upperbound(ls)
        messagebox('提示', '域名【' + ls_dsn + '】对应的IP地址(' + string(i) + ')为:~r~n~r~n' + ls[i])
    next
end if



如何获取域名(网址)对应的IP地址

域名(Domain Name),是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。通俗点讲,域名就是我们平时进行网络浏览时所用到的网址(...

单片机编程实现用网址域名获取服务器IP,超简单,一句话

为了适合需要,现在设备IP可能变化,以dev.fuhome.net域名所指向的IP为准。(其他域名以后仅作浏览网页使用,原IP暂时有效,有兴趣的可以根据本文内容做到再也不需要固定服务器IP了,很简单的...

如何获取域名(网址)对应的IP地址

域名(Domain Name),是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。通俗点讲,域名就是我们平时进行网络浏览时所用到的网址(...

单片机编程实现用网址域名获取服务器IP,超简单,一句话

为了适合需要,现在设备IP可能变化,以dev.fuhome.net域名所指向的IP为准。(其他域名以后仅作浏览网页使用,原IP暂时有效,有兴趣的可以根据本文内容做到再也不需要固定服务器IP了,很简单的...

SQL语句通过网址获取主域名方法

我到上网搜了很多,http://www.baidu.com,基本上都是些的很死,截取,如果一旦出现 https://www.baidu.com.cn 或者 https://dd.xx.baidu.co...

pb9获取文件创建时间、最后修改时间及设置最后修改时间的方法

将以下内容保存为本地文件n_cst_filetime.sru,然后导入pbl中 $PBExportHeader$n_cst_filetime.sru $PBExportComments$与文件时间有...
  • yyoinge
  • yyoinge
  • 2011年10月27日 10:47
  • 2160

TCP/IP网络编程 学习笔记_9 --域名系统(DNS)

域名系统 什么是域名:我们网络通信底层最终还是通过IP地址来确认通信目标的,但以数字命名的IP地址非常难记,因此,我们就有了容易记,易表述的域名来取代IP地址。如,百度域名就是:www.baidu.c...

PB9读写大容量文件的方法

在pb9中,系统自带的读写文件的函数是fileread和filewrite,这两个函数最大的限制是读写量:一次最大只能读写32765字节的数据。这个限制导致它本身不适用于读写大容量的文件。     ...
  • yyoinge
  • yyoinge
  • 2011年11月04日 14:47
  • 2160

pb9生成guid的方法

 pb9生成guid的方法 (2013-04-09 12:35:11) 转载▼ 标签: pb9 guid 全球唯一识别码   pb...
  • tlammon
  • tlammon
  • 2015年06月01日 10:08
  • 385
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PB9中通过网址(域名)获取IP的方法
举报原因:
原因补充:

(最多只允许输入30个字)