VC++如何获取本机的IP地址

VC++如何获取本机的IP地址,第1张

获取本机ip实现过程:

WSAStartup()。Windows Sockets Asynchronous的启动命令,Windows下的网络编程必须先启用本命令,不然,后续的 *** 作都会报错:10093:WSAStartup() 调用未成功执行过。

gethostname()获得本机名

gethostbyname()获得本机网络信息,存储到struct hostent 指针中,返回给调用者

从struct hostent结构体信息中,获取ip地址,转换成字符串输出

参考代码 :

#include "winsock2h"

#pragma comment(lib,"ws2_32lib")

int main(int argc, char argv[])

{

WSADATA wsaData;

char name[155];

char ip;

PHOSTENT hostinfo;

if ( WSAStartup( MAKEWORD(2,0), &wsaData ) == 0 )

{

if( gethostname ( name, sizeof(name)) == 0)

{

printf("hostname=%s\n", name );

if((hostinfo = gethostbyname(name)) != NULL)

{

ip = inet_ntoa ((struct in_addr )hostinfo->h_addr_list); //得到地址字符串

printf("local host ip: %s\n",ip);

}

}

WSACleanup( );

}

return 0;

}

你试试这个,获取正确可用的IP地址:

private IPAddress getIdAddress()

        {

            //IPHostEntry ipEntity = DnsGetHostEntry(DnsGetHostName());      

            ////IPAddress ipAddr = ipEntityAddressList[0];

            //IPAddress ipAddr = DnsGetHostAddresses(DnsGetHostName())[0];      

            //if (ipAddrAddressFamily == SystemNetSocketsAddressFamilyInterNetworkV6)//判断是否IP6协议   

            //{      //    ipAddr = DnsGetHostEntry(DnsGetHostName())AddressList[1];      //}      

            IPAddress ipAddr = null;

            IPAddress[] arrIP = DnsGetHostAddresses(DnsGetHostName());

            foreach (IPAddress ip in arrIP)

            {

                if (SystemNetSocketsAddressFamilyInterNetworkEquals(ipAddressFamily))

                {

                    ipAddr = ip;

                    break;

                }

                else if (SystemNetSocketsAddressFamilyInterNetworkV6Equals(ipAddressFamily))

                {

                    ipAddr = ip;

                }

            } return ipAddr;

        }

之前的即时通讯里面用的

这种方法为从urlparse模块中通过urlparse方法提取url通过hostname属性获取当前url的域名

此方法是通过urllib模块中splittype方法先从url中获取到proto协议及rest结果,然后通过splithost从rest中获取到host及rest结果,此时host为域名。(rest被分割了两次)如下图:

此方法为从sokcet模块中获取到gethostbyname方法将域名传递进去就能解析出域名的ip。

此方法为通过nslookup获取域名的ip。

以上从域名中提取ip会不准确,需要设置DNS服务器,这样解析域名就准确了。

String ls_hostname

long ll_ret, ll_namelen

String ls_ipaddress

Blob lblb_ipaddr

hostent lstr_host

ULong lul_ptr, lul_ipaddr

ll_namelen = 32

ls_hostname = Space(ll_namelen)

ll_ret = gethostname(ls_hostname, ll_namelen)

If ll_ret <> 0 Then

messagebox("函数错误","获取服务器名称错误!", StopSign!)

End If

// 获取主机信息

lul_ptr = gethostbyname(ls_hostname)

//sleep(05)

If lul_ptr > 0 Then

//拷贝结构到本地结构中

CopyMemoryIP(lstr_host, lul_ptr, 16)

// 获得ip地址在内存中的地址

CopyMemoryIP(lul_ipaddr, lstr_hosth_addr_list, 4)

//拷贝ip地址到blob变量中

lblb_ipaddr = Blob(Space(4))

CopyMemoryIP(lblb_ipaddr, lul_ipaddr, 4)

// 转换

ls_ipaddress = String(Asc(String(BlobMid(lblb_ipaddr,1,1))),"##0") + ""

ls_ipaddress += String(Asc(String(BlobMid(lblb_ipaddr,2,1))),"##0") + ""

ls_ipaddress += String(Asc(String(BlobMid(lblb_ipaddr,3,1))),"##0") + ""

ls_ipaddress += String(Asc(String(BlobMid(lblb_ipaddr,4,1))),"##0")

Else

MessageBox( "Winsock错误","获得IP地址出错!", StopSign!)

End If

messagebox("本机IP地址",ls_ipaddress)

//以上代码用PB90通过

DOS获取本机IP(括号内的为注释,输命令时别复制进去)。

方法1:arp -a (Interface:后面的就是你自己的IP地址)

方法2:ipconfig/all (IP Address后面的就是你自己的IP地址)

DOS重新获取IP

cmd /c ipconfig /release (释放IP,不执行这步下一步命令将无效)

cmd /c ipconfig /renew (重新获得IP)

上不了网或IP冲突时可以在记事本里贴入如下代码保存为如下文件名并执行:

重新获取IPbat

@echo off

@echo 正在重新获取IP,请稍候

cmd /c ipconfig /release > nul

cmd /c ipconfig /renew > nul

arp -a

@echo "Interface:后面的就是你自己的IP地址"

@echo "按任意建测试网络联通(不断跳说明网络正常)"

pause

ping >

以上就是关于VC++如何获取本机的IP地址全部的内容,包括:VC++如何获取本机的IP地址、vs2008C#获取IP地址的问题、Python获取url中域名及从域名中提取ip的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10100939.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存