Socket协议概要
创建socket的时候,需要一些选项来说明本次使用协议具体是什么,常用的两个:
 
 由此产生的不同组合:
 
 但目前TCP(IPV4)是主流,SOCK_STREAM+AF_INET
创建和使用Socket
socket模块中有socket类: socket.socket
- 接收数据的方法
- 发送数据的方法
- 监听端口的方法
socket函数:
- 创建客户端
- 创建服务端
- 创建客户端+服务端(已连接)
- ……
相关函数:
-  基本函数 
  
-  便捷函数 
-  - 创建服务端socket
 1 创建socket
 2 绑定地址(ip+port)
 3 监听地址
  
 
- 创建服务端socket
怎么判断判断是否连接成功,我们可以在连接之后打断点,并在命令行查看是否监听,用netstat -ano | findstr 端口号
 
-  - 创建客户端socket
 1 创建socket
 2 绑定地址(ip+socket)
 3 向指定的服务端发起链接
  
 
- 创建客户端socket

-  - 创建已连接的socket
 1 创建两个socket,其中一个座位server监听端口,另一个座位client连接端口
 2 连接成功后,把两个socket返回
  
 查看pid 得到通信状态:
  
 只有两个连接,是没有监听状态的,所以不会有其他链接进来,只能有这两个。
 
- 创建已连接的socket
Socket对象
socket提供了一系列方法完成网络连接、数据通信,常用的有:
-  网络连接 
-  - 服务端
 1 bind绑定地址(ip+port
 2 listen监听端口,允许其他socket发起连接
 3 accept接收连接,生成新的socket,完成数据收发
 4 cloese 关闭连接
 
- 服务端
-  - 客户端
 1 bind绑定地址(ip+port
 2 connect连接指定地址
 3 cloese 关闭
 
- 客户端
-  数据通信(IO) 
-  - sendall 发送数据
 
-  - recv 接收数据
 
配置日志

创建服务端代码:
 
 创建客户端代码:
 
通信:传递二进制数据流
 server.accept()的返回值是一个新的socket连接和连接的客户端地址,
 server只做一个事情,就是用来监听并创建新的连接
 发送信息由客户端发送,conn用来接收并发送返回信息
 

使用便捷函数完成上述功能:
 创建服务端监听python3.8+:
 
 创建客户端连接:
 
 通信部分代码不变
使用TTD方法实现socket编程
测试驱动开发TDD:
 1 编写测试用例
 2 执行测试用例(测试失败-红
 3 编写业务代码
 4 执行测试用例(测试成功-绿
 5 重构代码
 6 执行测试用例

内置的socketserver
socketserver预制了常见了socketserver:
- TCPServer
- ThreadingTCPServer
- ForkingTCPServer
 1能够处理客户端中断的异常,不会导致server退出
 2提供了并发的支持
 3 将网络连接、数据处理分开
ThreadingTCPServer使用
socket聊天室:多人同时在线每个人都可以发言,发言内容每个人都能收到
 协议:
 header:固定长度,申明body长度
 body:不固定长度
 结束标记:以某个字符串作为结束标记(“\n”)
 使用TCP进行传输
 数据格式:name msg time ,使用json字符串{“name”:“张三”,“msg”:“你好”,“time”:“2024-2-24”}
编写客户端
-  1 建立socket, 断开socket 
-  2 发送消息能力: 
 2.1 确定要发送的内容
 2.2 组装固定格式的字典
 2.3 将字段转字符串
 2.4 字符串+\n
 2.5 字符串转字节流
 2.6 借助socket发送字节流
-  3 接收消息能力 
 3.1 从socket读取字节流
 3.2 字节流转字符串
 3.3 去掉结束标记
 3.4 字符串转字典
 3.5 返回字典
发送:
 
 接收:
 
 socket链接的建立和断开:
 
编写相关测试用例

夹具:启动和关闭服务器
 
举例:可回复消息用例
 
 其余用例可 以上述用例为基础进行拓展
todotodo:
 