【C++】Winsock套接字编程(TCP/IP协议体系)常用API
来源:互联网 发布:淘宝已经收货申请退款 编辑:程序博客网 时间:2024/06/05 15:08
鄙人水平浅薄,如有错误,欢迎大神指正
系统环境:Windows10 64位开发环境:VisualStudio2015
PS:关于本文提供的winsock套接字API,是针对win操作系统的,但是大部分API对于linux系统一样适用,可能部分类型win系统进行了typedef类型申明(比如socket函数创建套接字时,win返回的是typedef后的SOCKET,linux返回的是int,实质上返回的都是无符号整型数据,移植到linux时需要注意),windows平台下使用winsock需要使用(一)中提供的初始化和释放资源API,linux不需要,可以直接略过。
头文件:#include<WinSock2.h>
一、初始化、释放资源1.函数:int WSAStartup(WORD wVersionRequested , LPWSADATA lpWSAData); 功能:初始化WinSock,检查系统是否可用WindowsSockets库 参数:wVersionRequestedWinSock版本号(两个字节,高位副版本,低位主板本) lpWSAData对应WinSock的信息 返回值:成功0,失败非0 PS:windows平台下使用winsock进行套接字编程前,必须使用该函数进行初始化,否则会调用API失败
2.函数:int WSACleanup() 功能:停止使用WinSock库,释放对应资源 参数:无 返回值:成功0,失败非0 PS:使用winsock结束后调用,对应WSAStartup函数
二、套接字1.函数:SOCKET socket(int af , int type , int protocol) 功能:创建一个套接字 参数:af 创建套接字指定的协议地址族,TCP或是UDP使用AF_INET即可 type 套接字协议类型(TCP:SOCK_STREAM,UDP:SOCK_DGRAM,原是套接字:SOCK_RAW) protocol 套接字使用的特定协议,默认0将根据前两个参数自动设置 返回值:创建成功,返回一个无符号的整型数据,失败INVALID_SOCKET PS:对应Linux系统下,返回值类型是int,其实都是无符号整型
2.函数:int shutdown(SOCKET s , int how) 功能:停止套接字的接收、发送功能 参数:s 需要关闭的套接字标识符 how 关闭哪些功能(0禁止接收,1禁止发送,2禁制接收发送) 返回:成功0,失败SOCKET_ERROR PS:只是关闭发送接收功能,并没有释放套接字占用的资源
3.函数:int closesocket(SOCKET s) 功能:关闭套接字,释放资源 参数:s 需要释放资源的套接字标识符 返回:成功0,失败SOCKET_ERROR PS:释放资源,如果套接字的队列中还没有发送出去的数据,会根据setsockopt函数设定的套接字状态进行处理
4.函数:int bind(SOCKET s , const struct sockaddr *name , int namelen) 功能:将套接字与本地地址信息进行绑定 参数:s 进行操作的套接字 name 网络地址信息的结构体 namelen 网络地址信息结构体的长度 返回:成功0,失败SOCKET_ERROR
PS:bind函数只应用于服务器端; const struct sockaddr这个结构体,是通用的套接字地址结构体,TCP/IP协议体系下使用const struct sockaddr_in进行代替,二者的内存占用一样,使用时只须将sockaddr_in进行类型强转即可,两个结构体的内部信息后面有详细介绍;
5.函数:int listen(SOCKET s , int backlog) 功能:设定套接字为侦听状态,准备接收客户机进程发送来的连接请求 参数:s 负责侦听的套接字标识符 backlog 允许等待连接的队列最大长度 返回:成功0,失败SOCKET_ERROR
PS: listen函数只应用于服务器端 只针对面向连接的套接字,即TCP协议;
6.函数:int connect(SOCKET s , const struct sockaddr *name , int namelen) 功能:向服务器提出连接请求 参数:s 设定建立连接的套接字标识 name 通信对方(服务器)的网络地址信息结构体 namelen 网络地址信息结构体的长度 返回:成功0,失败SOCKET_ERROR
PS:const sturct sockaddr与bind函数里的使用方法一样
7.函数:SOCKET accept(SOCKET s , const struct sockaddr * addr , int *addrlen) 功能:接收客户端进程connect函数发送的连接请求 参数: s 侦听状态的套接字(listen函数的套接字) addr 存放客户端IP地址信息的结构体的指针 addrlen addr的长度 返回:成功返回建立连接的套接字标识,失败返回INVALID_SOCKET
三、传输API1.函数:int recv(SOCKET s , char *buf , int len , int flags) 功能:通过已建立连接的套接字,接收数据 参数:s 已建立连接的套接字 buf 存储客户端进程发送来的数据缓冲区 len 缓冲区长度 flags 操作方式(0正常数据,MSG_PEED系统缓冲区的数据复制到所提供的接收缓冲区内,系统缓冲区数据未删除,MSG_OOB处理带外数据,通常用参数0即可) 返回:成功返回接收到的数据长度,连接结束返回0,失败返回SOCKET_ERROR
2.函数:send(SOCKET s , const char *buf , int len , int flags) 功能:通过已建立连接的套接字,发送数据 参数:s 已建立连接的套接字标识符 buf 待发送数据的缓冲区 len 缓冲区数据长度 flags 传输方式(0正常方式,MSG_DONTROUTE目标主机就在本地网中,MSG_OOB带外数据发送) 返回:成功返回发送的数据长度,连接结束返回0,失败返回SOCKET_ERROR
backlog 允许等待连接的队列最大长度
下一篇详解
网络字节序、主机字节序区别和相互转换的API
以及
struct sockaddr与struct sockaddr_in两种套接字地址信息结构体的内部结构和使用方法
0 0
- 【C++】Winsock套接字编程(TCP/IP协议体系)常用API
- 【C++】Winsock套接字编程,简单的TCP/IP通信代码(客户端、服务端)
- TCP/IP协议的套接字类型及异步winsock编程例子
- WinSock API网络编程——TCP/IP协议
- WinSock API网络编程——TCP/IP协议
- WinSock API网络编程——TCP/IP协议详解
- java TCP/IP Socket编程-----基本套接字-----常用API方法解释-----笔记4
- 【tcp-ip学习总结】一些常用的winsock API函数
- WinSock API网络编程——TCP/IP协议(http://www.impcas.ac.cn/usr/lujun/browse.asp?id=winsock_tcp)
- Vc++编程winsock ---Socket(套接字)
- Vc++编程winsock ---Socket(套接字)
- TCP/IP Winsock编程要点
- TCP/IP Winsock编程要点
- TCP/IP Winsock编程要点
- TCP/IP Winsock编程要点
- TCP/IP Winsock编程要点
- TCP/IP Winsock编程要点
- TCP/IP Winsock编程要点
- 映射消息
- _stdcall,_cdecl
- 依赖倒置原则
- 全局异常捕获
- Android官方MVP架构解读
- 【C++】Winsock套接字编程(TCP/IP协议体系)常用API
- SDAutolayout用法大全
- sql2005数据库置疑修复断电崩溃索引损坏
- 文本语言模型的参数估计-最大似然估计、MAP及贝叶斯估计
- 开发中最常用的GitHub上 优秀的 Android 开源项目整理(精品)
- PowerPoint2007将Word 文档作为新演示文稿打开
- C#中String类的几个方法(IndexOf、LastIndexOf、Substring)
- 关于tmux和常见vim使用
- echart如何设置饼图的颜色以及柱状图颜色