windows下socket编程小例子
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows下socket编程小例子相关的知识,希望对你有一定的参考价值。
服务端
- 首先引进头文件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)
大致流程:
参考自:
http://www.cnblogs.com/Sniper-quay/archive/2011/06/22/2086636.html
以上是关于windows下socket编程小例子的主要内容,如果未能解决你的问题,请参考以下文章
python速成第二篇(小爬虫+文件操作+socket网络通信小例子+oop编程)
Windows Socket和Linux Socket编程有什么区别