windows下socket编程小例子

时间:2021-09-17 02:49:52

首先引进头文件winsock2.h和库文件ws2_32.lib(开发环境为vs2015)

加载套接字库和创建套接字    

绑定套接字到一个IP地址和端口上

监听客户端发来的连接请求

接收或发送信息

关闭套接字,套接字库

客户端

首先引进头文件winsock2.h和库文件ws2_32.lib(开发环境为vs2015)

加载套接字库,创建套接字对象

向服务端发出连接请求

收发信息

关闭套接字和套接字库

注释

WSAStartup结构体中主要包含了系统所支持的Winsock版本信息

WSAstartup()用于初始化Windows sockets,并返回WSADATA结构体,只有调用了该函数后,程序才能调用其他WIndows sockets api函数,实现网络通信。函数第一个参数为版本号,第二个用于接收返回的WSADATA结构体。

SOCKET PASCAL FAR socket(int af, int type, int protocol);   该调用要接收三个参数:af、type、protocol。参数af指定通信发生的区域,: WINDOWS中仅支持AF_INET,它是网际网区域。参数type 描述要建立的套接字的类型。这里分三种:一是TCP流式套接字(SOCK_STREAM)提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复地发送,且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制,二是数据报式套接字(SOCK_DGRAM)提供了一个无连接服务。数据包以独立包形式被发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。三是原始式套接字 (SOCK_RAW)该接口允许对较低层协议,如IP、ICMP直接访问。参数protocol说明该套接字使用的特定协议,如果调用者不希望特别指定使用的协议,则置为0,,使用默认的连接模式。

int bind(int socket, struct socketaddr *address, int addr_len) 功能:将创建的 socket 与 adress (包含 IP和port信息)绑定。 返回值:正常情况返回0,在错误的时候会返回-1 参数 socket 描述将使用的套接字。 参数 addr_len 描述的是参数 adress的长度。 参数 adress 描述将绑定的地址。

int listen(int socket, int backlog) 功能:定义在指定的 Socket 上可有多少个待处理的连接。 返回值:在发生错误时返回-1。 参数socket 是调用 socket() 返回的套接口文件描述符。 参数backlog 是在进入队列中允许的连接数目。

int accept(int socket, struct socketaddr *address , int addr_len) 功能:接收客户端连接请求。 返回值:如果连接成功, 函数将返回一个新的套接口文件描述符。接下来,就可以对这个描述符进行发送 (send()) 和接收 (recv()) 操作了。错误时返回-1

参数socket :套接口文件描述符。 参数address struct: sockaddr_in 的指针。 参数addrlen: 长度,常为 sizeof(struct sockaddr_in)

int connect(int socket, struct sockaddr *serv_addr, int addrlen) 功能:在客户端被用于连接到服务器。 返回值:发生错误的时候返回-1 参数socket 套接口文件描述符。 参数serv_addr 包含是服务器的地址和端口信息 参数addrlen 长度,常为 sizeof(struct sockaddr_in)

大致流程:

参考自:

windows下socket编程小例子