文章目录
- 1.什么是Socket
- 2.Socket类型
- 3.Socket的位置
- 4.WinSock介绍
- 5.在工程中例用Winsock
- 6.基本函数
- 7.面向连接的C/S程序工作流程图
- 8.Windows Socket的启动
- 9.无连接的C/S程序工作流程图
1.什么是Socket
- 独立于具体协议的网络编程接口
TCP/IP和UNIX域 - 在ISO模型中,主要位于会话层和传输层之间
- BSD Socket(伯克利套接字)是通过标准的UNIX文件描述符和其它程序通讯的一个方法,目前已经被广泛移植到各个平台。
- 不同操作系统中的Socket
Windows Socket (Winsock)
Linux Socket (BSD Socket)
2.Socket类型
- 流式套接字(SOCK_STREAM)
提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。 - 数据报套接字(SOCK_DGRAM)
提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。 - 原始套接字(SOCK_RAW)
可以对较低层次协议,如IP、ICMP直接访问。
3.Socket的位置
4.WinSock介绍
- Winsock是一个基于Socket模型的API,在Windows系统中广泛使用
- 它在Berkeley接口函数的基础上,还增加了基于消息驱动机制的Windows扩展函数
- Winsock1.1只支持TCP/IP网络,Winsock2.2增加了对更多协议的支持
5.在工程中例用Winsock
- 包含头文件
- 导入库ws2_32.lib的方法:
(2)
6.基本函数
- 网络连接函数
- 转换函数
7.面向连接的C/S程序工作流程图
- win不使用read和write;win需要WSAStartup和WSACleanup;win用的是closesocket而不是close
8.Windows Socket的启动
- 使用Winsock API编制的网络应用程序中,在调用任何一个Winsock函数之前都必须检查协议栈安装情况。
- Winsock启动示例
- 创建套接口socket()
- 创建套接口socket()
函数参数:
protocol:说明该套接口使用的特定协议,当协议地址族af和协议类型type确定后,协议字段可以使用的值是限定的
返回值:成功返回一个整型代表创建成功的socket编号;失败返回INVALID_SOCKET,可以使用WSAGetLastError()获得错误编号。 - 指定本地地址-bind()
- IP地址转换函数-inet_addr()
- 服务器端启动监听-listen()
- 客户端请求连接-connect()
- connect()函数的说明
(1)在客户端使用该函数请求建立连接时,将激活建立连接的三次握手,用来建立一条到服务器TCP的连接。如果调用该函数前没有调用bind()来绑定本地地址,则由系统隐式绑定一个地址到该套接口
(2)该函数用在UDP的客户端时,connect()函数并不是真正地发出建立请求连接的请求,调用将从本地操作系直接返回。这样可以将服务器的地址信息保存下来,在后续UDP端口发送数据时,由套接口自动在发送函数中填入服务器地址,而不需要由应用程序在调用发送函数时填入 - 服务器端接受连接-accept()
- 发送数据-send()
- 接收数据-recv()函数
- 关闭读写通道-shutdown()
- shutdown()函数参数说明
s标识一个套接口的描述字
how是一个标志,用于描述禁止哪些操作,取值如下表所示 - 关闭套接口-closesocket()
9.无连接的C/S程序工作流程图
- recvfrom()
- sendto()
- WSAStartup的使用按下F1查看帮助
- bind的F1帮助以及索引
- 查下他的返回值,看看都是整数
- 错误码查看
若调试出现 - eg:服务端使用do_server()
P99\TcpSrv\main.cpp,P99\TcpCli\main.cpp
P99\TcpSrv\main.cpp
P99\TcpCli\main.cpp
- 测试