VC++ 获取本机IP
发布网友
发布时间:2022-05-02 11:47
我来回答
共2个回答
热心网友
时间:2022-06-19 23:00
首先你要知道BYTE、WORD和DWORD分别是什么:
在VC6.0中BYTE、WORD和DWORD的定义分别是
typedef unsigned char BYTE; //一个字节,1 * 8位二进制数,范围 0 ~ 255
typedef unsigned short WORD; //两个字节,2 * 8位二进制数,范围0 ~ 65535
typedef unsigned long DWORD; //四个字节,4 * 8位二进制数,范围0 ~ 4294967295
可以看出,在存储的时候,1 DWORD = 2 WORD = 4 BYTE,
即 1 个DWORD 可以看成是 4 个连续的BYTE,也就是 unsigned char,
而 IP 地址刚好是 1 个DWORD,由 4 个 BYTE 组成,即常见的4段地址(比如192.168.0.1),这也就是为什么 IP 地址每段的数值都在0~255范围内(unsigned char)
现在回到代码:
unsigned char *pIP=(unsigned char*)&dwIP;
就是把 unsigned char* 指针 pIP 指向 dwIP 的第1个BYTE,所以, *(pIP+1)就指向dwIP的第2个BYTE,后面以此类推
对于inet_ntoa和inet_addr这两个函数,请自己百度一下就好了,相信你能看得懂
inet_ntoa():http://ke.baidu.com/view/4786779.htm
inet_addr():http://ke.baidu.com/view/569199.htm
热心网友
时间:2022-06-19 23:00
获取本机ip实现过程:
WSAStartup()。Windows Sockets Asynchronous的启动命令,Windows下的网络编程必须先启用本命令,不然,后续的操作都会报错:10093:WSAStartup() 调用未成功执行过。
gethostname()获得本机名
gethostbyname()获得本机网络信息,存储到struct hostent *指针中,返回给调用者
从struct hostent结构体信息中,获取ip地址,转换成字符串输出
参考代码 :
#include "winsock2.h"
#pragma comment(lib,"ws2_32.lib")
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;
}