网络编程第一章总结(下)

1.3、基于windows平台的实现

1.3.1、配置环境

在使用windows进行socket网络编程之前,需要先配置所需要的ws2_32.lib。
配置:属性 -> 配置属性 -> 输入 -> 附加依赖项中添加ws2_32.lib

1.3.2、Winsock初始化

在Winsock编程时,首先需要调用WASAtartup函数来设置Winsock版本,并初始化相应的库。

int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

wVersopmRequested:指需要用到的Winsock版本信息。lpWSAData:WSADATA结构体变量的地址值。WODR是typedef声明定义的unsigned short类型(若版本为1.2,则1表示主版本号,2表示副版本号,应传递0x0201,使用2.2版本应传递0x0202)
exam:

int main(void)
{
	WSADATA wsaData;
	if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
		ErrorHandling("WSAStartup() error!");
	return 0;
}

1.3.3、注销Winsock

int WSACleanup(void);

成功返回0,失败则返回SOCKET_ERROR。一般在程序结束之前调用。

1.4、基于windows的套接字相关函数

1.4.1、创建套接字

SOCKET socket(int af, int type, int protocal);

成功返回套接字句柄,失败则返回INVALID_SOCKET。

1.4.2、绑定套接字

bind函数在windows和linux中相同

int bind(SOCKET s, const struct sockaddr * name, int namelen);

成功返回0,失败则返回SOCKET_ERROR。

1.4.3、监听套接字

listen函数在windows和linux中相同。

int listen(SOCKET s, int backlog);

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

1.4.4、接受请求

accept在windows和linux中相同。

SOCKET accept(SOCKET s, struct sockaddr * addr, int * addrlen);

成功返回句柄,失败返回INVALID_SOCKET。

1.4.5、发送连接请求

connect在windows和linux下相同。

int connect(SOCKET s, const struct sockaddr * name, int namelen);

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

1.4.6 关闭socket

在windows下需要自己关闭socket连接,需要用到closesocket函数。

int closesocket(SOCKET s);

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

1.5、windows下数据传输

linux中将套接字也当作文件,所以无论是创建文件还是套接字都是返回文件描述符。而在windows中则需要区分文件句柄和socket句柄。由于linux中套接字也是文件,所以可以直接通过文件I/O函数read和write来进行数据传输,而windows中则不同,windows中严格区分文件I/O和套接字I/O。所以windows进行数据传输需要用到send和recv函数。

1.5.1、数据传输函数

使用send函数进行数据的传输。

int send(SOCKET s, const char *buf, int len, int flags);

成功返回传输字计数,失败返回SOCKET_ERROR。
s:句柄;buf:保持待传输数据的缓冲地址值;len:要传输的字节数;flags:传输数据时用到的多种选项信息。

1.5.2 接收数据

使用recv函数接受数据。

int recv(SOCKET s, const char * buf, int len, int flags);

成功返回接收的字节数,如果到eof返回0,失败返回SOCKET_ERROR。
s:套接字;buf:数据缓冲;len:最大字节数;flags:接受多种选项信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值