Windows Socket 网络编程(四) —— Winsock 编程接口
2010-05-25 22:56
155 查看
//////////////////////////////////////////////////////////
// initsock.h文件
/*****************************************************************************************
WSAStartup();加载相应版本的Winsock DLL;
第一个参数指定版本 MAKEWORD是将两个byte型合并成一个word型,一个在高8位(b),一个在低8位(a)
第二个参数 引用,所加库的版本信息填充他
函数调用成功返回0
*****************************************************************************************/
#include <winsock2.h>
#pragma comment(lib, "WS2_32") // 链接到WS2_32.lib
class CInitSock
{
public:
CInitSock(BYTE minorVer = 2, BYTE majorVer = 2)
{
// 初始化WS2_32.dll
WSADATA wsaData;
WORD sockVersion = MAKEWORD(minorVer, majorVer);
if(::WSAStartup(sockVersion, &wsaData) != 0) //函数调用成功返回0
{
exit(0);
}
}
~CInitSock()
{
::WSACleanup();
}
};
//////////////////////////////////////////////////
// GetAllIps.cpp文件
#include "../common/InitSock.h"
/*****************************************************************************************
0x表示十六进制数
////////////////////////////////////////////////////////////////////////////////////////
unsigned long inet_addr(const char * cp); //将一个"aa.bb.cc.dd"类型的IP地址字符串转化为
32位的二进制数,用网络顺序存储的
char inet_ntoa(in_addr in); //将32位的二进制数转化为字符串
////////////////////////////////////////////////////////////////////////////////////////
struct hostent {
char FAR * h_name; //地址的正式名称
char FAR * FAR * h_aliases; //空字节-地址的预备名称的指针
short h_addrtype; //地址类型; 通常是AF_INET
short h_length; //地址的比特长度
char FAR * FAR * h_addr_list; //零字节-主机网络地址指针。网络字节顺序
#define h_addr h_addr_list[0]
};
char *h_name 表示的是主机的规范名。
char **h_aliases 表示的是主机的别名。
int h_addrtype 表示的是主机ip地址的类型,到底是ipv4(AF_INET),还是ipv6(AF_INET6)
int h_length 表示的是主机ip地址的长度
int **h_addr_lisst 表示的是主机的ip地址
*****************************************************************************************/
#include <stdio.h>
CInitSock initSock; // 初始化Winsock库
void main()
{
char szHost[256];
// 取得本地主机名称
::gethostname(szHost, 256);
// 通过主机名得到地址信息
hostent *pHost = ::gethostbyname(szHost);
// 打印出所有IP地址
in_addr addr;
for(int i = 0; ; i++)
{
char *p = pHost->h_addr_list[i];
if(p == NULL)
break;
memcpy(&addr.S_un.S_addr, p, pHost->h_length);
char *szIp = ::inet_ntoa(addr);
printf(" 本机IP地址:%s /n ", szIp);
}
}
// initsock.h文件
/*****************************************************************************************
WSAStartup();加载相应版本的Winsock DLL;
第一个参数指定版本 MAKEWORD是将两个byte型合并成一个word型,一个在高8位(b),一个在低8位(a)
第二个参数 引用,所加库的版本信息填充他
函数调用成功返回0
*****************************************************************************************/
#include <winsock2.h>
#pragma comment(lib, "WS2_32") // 链接到WS2_32.lib
class CInitSock
{
public:
CInitSock(BYTE minorVer = 2, BYTE majorVer = 2)
{
// 初始化WS2_32.dll
WSADATA wsaData;
WORD sockVersion = MAKEWORD(minorVer, majorVer);
if(::WSAStartup(sockVersion, &wsaData) != 0) //函数调用成功返回0
{
exit(0);
}
}
~CInitSock()
{
::WSACleanup();
}
};
//////////////////////////////////////////////////
// GetAllIps.cpp文件
#include "../common/InitSock.h"
/*****************************************************************************************
0x表示十六进制数
////////////////////////////////////////////////////////////////////////////////////////
unsigned long inet_addr(const char * cp); //将一个"aa.bb.cc.dd"类型的IP地址字符串转化为
32位的二进制数,用网络顺序存储的
char inet_ntoa(in_addr in); //将32位的二进制数转化为字符串
////////////////////////////////////////////////////////////////////////////////////////
struct hostent {
char FAR * h_name; //地址的正式名称
char FAR * FAR * h_aliases; //空字节-地址的预备名称的指针
short h_addrtype; //地址类型; 通常是AF_INET
short h_length; //地址的比特长度
char FAR * FAR * h_addr_list; //零字节-主机网络地址指针。网络字节顺序
#define h_addr h_addr_list[0]
};
char *h_name 表示的是主机的规范名。
char **h_aliases 表示的是主机的别名。
int h_addrtype 表示的是主机ip地址的类型,到底是ipv4(AF_INET),还是ipv6(AF_INET6)
int h_length 表示的是主机ip地址的长度
int **h_addr_lisst 表示的是主机的ip地址
*****************************************************************************************/
#include <stdio.h>
CInitSock initSock; // 初始化Winsock库
void main()
{
char szHost[256];
// 取得本地主机名称
::gethostname(szHost, 256);
// 通过主机名得到地址信息
hostent *pHost = ::gethostbyname(szHost);
// 打印出所有IP地址
in_addr addr;
for(int i = 0; ; i++)
{
char *p = pHost->h_addr_list[i];
if(p == NULL)
break;
memcpy(&addr.S_un.S_addr, p, pHost->h_length);
char *szIp = ::inet_ntoa(addr);
printf(" 本机IP地址:%s /n ", szIp);
}
}
相关文章推荐
- Linux C 网络编程——3. TCP套接口编程
- 第二章 Winsock编程接口(1)
- 【转】Linux C 网络编程——TCP套接口编程
- 第二章 Winsock编程接口(2)
- Linux C 网络编程——3. TCP套接口编程
- Linux C 网络编程——3. TCP套接口编程
- Windows网络编程之Winsock 编程接口实验
- Windows Socket网络编程——第二章 Windows Socket概念
- Z-Stack ZigBee API命令解释----应用程序编程接口1
- 基于VC的WinSock网络编程实用宝典
- javascript 实现 接口编程
- 第四章:基本TCP套接口编程
- SAP接口编程 之 JCo3.0系列(03) : Table参数
- java 网络编程Socket编程
- Java编程思想笔记第九章(接口)
- send、recv等socket编程接口的阻塞与非阻塞模式.md
- 网络聊天_客户端(Winsock编程)
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(3)-面向接口的编程
- 关于面象接口编程的理解
- STM32编码器接口,以及应用编程