Part 1 start network programming:chapter one:1.3 基于Windows平台的实现

正文

1.3 基于Windows平台的实现

win套接字简称 Winsock

1.3.1 同时学习Linux和Windows目的

两者其实差异不大

1.3.2 为Windows套接字编程设置头文件和库

作者用的是codeblocks 只需要在编译器-》链接器设置中添加
E:\CodeBlocks\MinGW\lib\libws2_32.a(libws2_32这个库就ok啦,位置因人而异~)

1.3.3 Winsock的初始化

首先必须调用WSAStartup函数,设置程序中用到的Winsick版本,并初始化相应版本的库

#include <winsock2.h>

// wVersionRequested:程序员要用的Winsock版本信息 ;
// lpWSAData:WSADATA结构体变量的地址值
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
成功返回0,失败返回非零的错误代码值

上方函数参数的说明:
有必要给出上述两个参数的详细说明。
先说第一个, Winsock 中存在多个版本,应准备WORD类型
(WORD 是通过 typedef 声明定义的 unsigned short 类型)的套接字版本信息,并传递给该函数的第一个参数 wVersionRequested 。若版本为1.2,则其中1是主版本号,2是副版本号,应传递
0x0201。
如前所述,高8位为副版本号,低8位为主版本号,以此进行传递。主要使用22版本
故应传递0x0202。不过,以字节为单位手动构造版本信息有些麻烦,借助 MAKEWORD宏函数则
能轻松构建WORD型版本信息。

MAKEWORD(1,2);	//主版本为1 副版本为2 返回0x0201
MAKEWORD(2,2);	//主版本为2 副版本为2 返回0x0202

再说第二个参数lpWSADATA 这个参数需要传入 WSADATA型结构体变量地址(LPWSADATA是WSADATA的指针类型)
地址中填充已初始化的库信息。 下面的调用过程是 Winsock编程的公式

int main(int argc, char* argv[])
{
	WSADATA wsaData;
	......
	if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0){
		ErrorHandling("WSAStartup() error!");
	}
	......
	return 0;
}

前面介绍了Winsock相关库的初始化方法,接下来是如何注销该库————利用下面的函数(WASCleanup(void))

#include <winsock2.h>
int WSACleanup(void);

成功时返回0,失败时返回SOCKET_ERROR

具体的实践过程见下一节内容1.4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值