第二章 Winsock编程接口(1)

第一章的一大堆理论知识,以后补上,先敲点小代码过过瘾。

winsock是windows下网络编程的标准接口,使用winsock开发网络应用程序,需要包含相关头文件和链接库文件。

#include <winsock2.h>

#pragma comment(lib, "WS2_32.lib")

winsock库的加载与卸载:

加载:int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

加载成功,返回值为0。

WORD wVersionRequested加载的winsock版本,使用宏MAKEWORD(x, y),x表示高字节,y表示低字节。然而使用时MAKEWORD(2, 2)。高字节与低字节相同~~

LPWSADATA lpWSADataWSADATA结构的指针,传入参数后,系统帮助我们填充版本信息。有兴趣的可以看看结构体内容,不过基本用不着。

卸载:int WSACleanup(void);比起加载,卸载的函数真是轻松愉快。

每个网络应用程序的开发都要使用winsock的加载和卸载,每写一个都要重新编码不是麻烦的要死?总不能每次都复制粘贴吧。

用C++封装成一个类就方便多了。

#include <winsock2.h>
#pragma comment(lib, "WS2_32.lib")

class CInitSock
{
public:
	CInitSock(BYTE bMinVer=2, BYTE bMaxVer=2)
	{
		WSADATA wsaData;
		if (WSAStartup(MAKEWORD(bMinVer, bMaxVer), &wsaData) != 0)
		{
			exit(0);
		}
	}
	~CInitSock()
	{
		WSACleanup();
	}
};

把写好的头文件放在include目录下,每次使用的时候:

#include <InitSock.h>

CInitSock initSock;;

就能完成加载与卸载。


获取主机所有ip地址代码:

#include <InitSock.h>
#include <stdio.h>

CInitSock initSock;

int main()
{
	char szHost[256];
	
	//得到主机名
	gethostname(szHost, 256);
	//得到地址信息
	hostent *pHost = gethostbyname(szHost);

	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);
	}

	return 0;
}
char * inet_ntoa(struct in_addr in);将32位的二进制数转化成字符串。

(1)的主要内容是winsock库加载和卸载以及一个小示例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值