获取本机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的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)