英雄联盟蛮王出装:获取主机的IP信息
来源:百度文库 编辑:九乡新闻网 时间:2024/05/02 09:43:29
#include "Winsock2.h"
1.MAKEWORD 宏 的使用
平台:SDK 这个宏创建一个被指定变量连接而成的WORD变量。返回一个WORD变量。 (注:typedef unsigned short WORD;) WORD MAKEWORD( BYTE bLow, //指定新变量的低字节序; BYTE bHigh //指定新变量的高字节序; ); 例如: WORD wVersionRequested; wVersionRequested = MAKEWORD( 2, 2 ); #define MAKEWORD(a,b) ((WORD) (((BYTE) (a)) | ((WORD) ((BYTE) (b))) << 8)) makeword是将两个byte型合并成一个word型,一个在高8位(b),一个在低8位(a) makelparam、makelong和makewparam都是一样的,将两个word型合并成一个dword型。一个在高16位,一个在低16位 delphi:word((byte(a)) or (word(byte(b))) shl 8); 比如a=2;b=1 2的二进制是00000010 1的二进制为00000001 B是表示高8位,A表示低8位 合并起来就是 100000010 想要的是MAKEWORE(1,1),MAKEWORD(2,2),有什么区别,是不是前面得只能一次接收一次,不能马上发送,后面的能。 比如: #include #include using namespace std; int main() { WORD wVersionRequested; wVersionRequested=MAKEWORD(2,2); cout << wVersionRequested << endl; return 0; } 输出的结果是514,说明是将前面的2和后面的2组成一个新的WORD。即0000 0010 0000 0010 而这个结果正是:512 + 2 = 514.
2.WSAStarup,是Windows SocKNDs Asynchronous的启动命令、Windows下的网络编程接口软件 Winsock1 或 Winsock2 里面的一个命令。简介
WSAStarup,即WSA(Windows SocKNDs Asynchronous,Windows套接字异步)的启动命令。是Windows下的网络编程接口软件 Winsock1 或 Winsock2 里面的一个命令(Ps:Winsock 是由Unix下的BSD Socket发展而来,是一个与网络协议无关的编程接口)。详细说明
为了在应用程序当中调用任何一个Winsock API函数,首先第一件事情就是必须通过WSAStartup函数完成对Winsock服务的初始化,因此需要调用WSAStartup函数。使用Socket的程序在使用Socket之前必须调用WSAStartup函数。该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利用第二个参数返回请求的Socket的版本信息。当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。编辑本段函数原型
#include int PASCAL FAR WSAStartup ( WORD wVersionRequested, LPWSADATA lpWSAData );wVersionRequested Windows Sockets API提供的调用方可使用的最高版本号。高位字节指出副版本(修正)号,低位字节指明主版本号。lpWSAData 指向WSADATA数据结构的指针,用来接收Windows Sockets实现的细节。3.返回本地主机的标准主机名。
//strHostIP 为 192.168.0.74 #include
4.gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针。结构的声明与gethostaddr()中一致。
简述
返回对应于给定主机名的主机信息。 #include编辑本段注释
gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针。结构的声明与gethostaddr()中一致。 返回的指针指向一个由Windows Sockets实现分配的结构。应用程序不应该试图修改这个结构或者释放它的任何部分。此外,每一线程仅有一份这个结构的拷贝,所以应用程序应该在发出其他Windows Scokets API调用前,把自己所需的信息拷贝下来。 gethostbyname()实现没有必要识别传送给它的IP地址串。对于这样的请求,应该把IP地址串当作一个未知主机名同样处理。如果应用程序有IP地址串需要处理,它应该使用inet_addr()函数把地址串转换为IP地址,然后调用gethostbyaddr()来得到hostent结构。编辑本段返回值
如果没有错误发生,gethostbyname()返回如上所述的一个指向hostent结构的指针,否则,返回一个空指针。应用程序可以通过WSAGetLastError()来得到一个特定的错误代码。5. inet_ntoa函数功能:将网络地址转换成“.”点隔的字符串格式。 所需库: winsock.h 也可以使用: 头文件 Winsock2.h lib Ws2_32.lib dll Ws2_32.dll 即在程序开头写: #include
6.hostent 是host entry的缩写,该结构记录主机的信息,包括主机名、别名、地址类型、地址长度和地址列表。之所以主机的地址是一个列表的形式,原因是当一个主机有多个网络接口时,自然有多个地址。hostent的定义如下:
struct hostent *gethostbyname(const char *name);
这个函数的传入值是域名或者主机名,例如"www.google.cn"等等。传出值,是一个hostent的结构。如果函数调用失败,将返回NULL。
struct hostent
{
char *h_name;
char **h_aliases;
int h_addrtype;
int h_length;
char **h_addr_list;
#define h_addr h_addr_list[0]
};
hostent->h_name
表示的是主机的规范名。例如www.google.com的规范名其实是www.l.google.com。
hostent->h_aliases
表示的是主机的别名.www.google.com就是google他自己的别名。有的时候,有的主机可能有好几个别名,这些,其实都是为了易于用户记忆而为自己的网站多取的名字。
hostent->h_addrtype
表示的是主机ip地址的类型,到底是ipv4(AF_INET),还是pv6(AF_INET6)
hostent->h_length
表示的是主机ip地址的长度
hostent->h_addr_lisst
表示的是主机的ip地址,注意,这个是以网络字节序存储的。千万不要直接用printf带%s参数来打这个东西,会有问题的哇。所以到真正需要打印出这个IP的话,需要调用inet_ntop()。
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt) :
这个函数,是将类型为af的网络地址结构src,转换成主机序的字符串形式,存放在长度为cnt的字符串中。返回指向dst的一个指针。如果函数调用错误,返回值是NULL。
HRESULT GetHostInfo(CString& strHostIP){int nCheck = 0;WORD wVersion = 0;CString strName = _T("");CString strIP = _T("");in_addr *pIPAddr = NULL;HOSTENT *pstHostInfo = NULL;char chrName[256];WSADATA wsaData;
wVersion = MAKEWORD(2, 2);nCheck = WSAStartup(wVersion, &wsaData);nCheck |= gethostname(chrName, 256); if(nCheck != 0) { return E_FAIL; } strName = (CString)chrName; #ifdef _UNICODE USES_CONVERSION; pstHostInfo = gethostbyname(W2A(strName)); #else pstHostInfo = gethostbyname(strName.GetBuffer(strName.GetLength())); #endif if(pstHostInfo != NULL) { LPBYTE pBuffer = NULL; pBuffer = new BYTE[4]; memcpy(pBuffer, pstHostInfo->h_addr_list[0], 4); pIPAddr = (in_addr*)pBuffer; strIP = inet_ntoa(*pIPAddr); delete [] pBuffer; pBuffer = NULL; } else return E_FAIL; strHostIP = strIP; return S_OK;
}
获取主机的IP信息
如何查看计算机的IP地址信息
XP中轻松获取未使用的IP地址
获取高考信息的十大途径
获取高考信息的十大途径
买土豆的故事?(信息获取)
如何有效获取信息
Android设备信息获取
Android设备信息获取
简单掌握子网掩码、ip地址、主机号、网络号、网络地址、广播地址 - 风投浪子的日志 - 网...
如何获取有效客户:潜在客户信息的获取是网络营销的目标
一个全面获取图象信息的函数getImageInfo()
公众获取信息的难度和成本被人为加大
【2011.03.16】QT获取本地ip
根据域名获取服务器IP地址 MTK
支持人民币付款的美国主机商 | 美国主机推荐
获取2011年高考信息的十大途径-高考成绩网
对考试大纲中获取信息能力的理解与认识
获取实习信息的四大重要途径-HR资讯-菏泽人力资源网
用“Ping命令”检测网络故障,获取对方IP
定制:互联网信息获取新方式!
订阅:互联网信息获取新方式!
获取客户信息十大渠道
宽带单账户实现多台主机上网,局域网固定单IP地址实现多主