第二章 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
    评论
第一章 简介 1.1 什么是Windows Sockets规范? Windows Sockets规范以U.C. Berkeley大学BSD UNIX中流行的Socket接口为范例定义了一套Micosoft Windows网络编程接口。它不仅包含了人们所熟悉的Berkeley Socket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程Windows Sockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。此外,在一个特定版本Windows的基础上,Windows Sockets也定义了一个二进制接口(ABI),以此来保证应用Windows Sockets API的应用程序能够在任何网络软件供应商的符合Windows Sockets协议的实现上工作。因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。 遵守这套Windows Sockets规范的网络软件,我们称之为Windows Sockets兼容的,而Windows Sockets兼容实现的提供者,我们称之为Windows Sockets提供者。一个网络软件供应商必须百分之百地实现Windows Sockets规范才能做到现Windows Sockets兼容。 任何能够与Windows Sockets兼容实现协同工作的应用程序就被认为是具有Windows Sockets接口。我们称这种应用程序为Windows Sockets应用程序。 Windows Sockets规范定义并记录了如何使用API与Internet协议族(IPS,通常我们指的是TCP/IP)连接,尤其要指出的是所有的Windows Sockets实现都支持流套接口和数据报套接口. 应用程序调用Windows Sockets的API实现相互之间的通讯。Windows Sockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值