獲取計算機的IP地址
阿新 • • 發佈:2019-02-12
函式功能:初始化Winsock庫
引數: wVersionRequested:接收一個WORD型整數,低位表示主版本號,高位表示子版本號
lpWSAData:WSADATA結構指標,儲存函式獲得的Winsock資訊
sockaddr_in結構體用於儲存客戶的地址
struct sockaddr_in
{
short sin_family //地址族,Winsock中必須是AF_INET
unsigned short sin_port //網路位元組序的埠號
struct in_addr //網路位元組序的IP地址
char sin_zero[8] //沒有用,只是為了增加8個位元組長度
}
使用此結構體和sockaddr結構體長度一致
scokaddr_in 用來儲存主機的地址資訊,但是主機的IP和埠必須為網路位元組序。通常人們所說的IP“192.168.0.10”,
埠80等都是主機位元組序
網路位元組序和主機位元組序之間的轉換
短整型轉換notohs轉換為htons
u_short notohs ( //將網路位元組序u_short轉換為主機位元組序
u_short netshort //要轉換的u_short
);
u_short htons ( //將主機位元組序u_short轉換成網路位元組序
u_short host short //要轉換的u_short
);
IP地址轉換
Inet_addr 與 inet_ntoa
unsingned long inet_addr( //將字串(例如"192.168.0.10")轉換為u_long型別
const char FAR *cp
);
char FAR * inet_ntoa ( //精sockaddr_in結構體中的sin_addr轉換為字串
struct in_addr in
);
程式程式碼
執行結果
網際網路協議地址(Internet Protocol Address,又譯為網際協議地址),縮寫為IP地址(IP Address)。IP地址是IP協議提供的一種統一的地址格式,它為網際網路上的每一個網路和每一臺主機分配一個邏輯地址,以此來遮蔽實體地址的差異
可以通過cmd下的IPconfig命名獲取計算機中的IP地址
開啟cmd
輸入ipconfig命令
在程式設計中可以通過使用Winsock庫實現獲取IP地址
需要看幾個函式:
WSAStartup函式
函式名:WSAStartup
函式原型::int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData);
#include <stdio.h>
#include <winsock2.h>
//連線Winsock庫
#pragma comment(lib, "ws2_32.lib")
void main()
{
//呼叫WSAtartup初始化Winsock庫
WSADATA wsaData;
::WSAStartup(
MAKEWORD(2,2),//版本號為2.2
&wsaData
);
char szHost[256];//存放主機名的緩衝區
::gethostname(szHost, 256);//取得本地主機名稱
hostent *pHost = ::gethostbyname(szHost);//通過主機名得到地址資訊
//一個主機可能有多個網絡卡、多個IP、下面的程式碼輸出所有的IP地址
in_addr addr;
for(int i=0; ; i++)
{
//獲得地址(網路位元組)
char *p = pHost->h_addr_list[i];
if(NULL == p)
{
break;//退出迴圈
}
//將地址拷貝到in_addr結構體中
memcpy(&addr.S_un.S_addr, p, pHost->h_length);
//將in_addr轉換為主機位元組序
char *strIP = ::inet_ntoa(addr);
//列印IP地址
printf("本機IP[%d]: %s\n", i+1, strIP);
}
//列印主機名
printf("主機名:%s\n", szHost);
system("pause");
}
執行結果