Python6:Socket编程初步学习笔记

发布于:2024-03-28 ⋅ 阅读:(20) ⋅ 点赞:(0)

Socket协议概要

创建socket的时候,需要一些选项来说明本次使用协议具体是什么,常用的两个:
在这里插入图片描述
由此产生的不同组合:
在这里插入图片描述
但目前TCP(IPV4)是主流,SOCK_STREAM+AF_INET

创建和使用Socket

socket模块中有socket类: socket.socket

  • 接收数据的方法
  • 发送数据的方法
  • 监听端口的方法

socket函数:

  • 创建客户端
  • 创建服务端
  • 创建客户端+服务端(已连接)
  • ……
相关函数:
  • 基本函数
    在这里插入图片描述

  • 便捷函数

    • 创建服务端socket
      1 创建socket
      2 绑定地址(ip+port)
      3 监听地址
      在这里插入图片描述

怎么判断判断是否连接成功,我们可以在连接之后打断点,并在命令行查看是否监听,用netstat -ano | findstr 端口号
在这里插入图片描述

    • 创建客户端socket
      1 创建socket
      2 绑定地址(ip+socket)
      3 向指定的服务端发起链接
      在这里插入图片描述

在这里插入图片描述

    • 创建已连接的socket
      1 创建两个socket,其中一个座位server监听端口,另一个座位client连接端口
      2 连接成功后,把两个socket返回
      在这里插入图片描述
      查看pid 得到通信状态:
      在这里插入图片描述
      只有两个连接,是没有监听状态的,所以不会有其他链接进来,只能有这两个。

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. 1 建立socket, 断开socket

  2. 2 发送消息能力:
    2.1 确定要发送的内容
    2.2 组装固定格式的字典
    2.3 将字段转字符串
    2.4 字符串+\n
    2.5 字符串转字节流
    2.6 借助socket发送字节流

  3. 3 接收消息能力
    3.1 从socket读取字节流
    3.2 字节流转字符串
    3.3 去掉结束标记
    3.4 字符串转字典
    3.5 返回字典

发送:
在这里插入图片描述
接收:
在这里插入图片描述
socket链接的建立和断开:
在这里插入图片描述

编写相关测试用例

在这里插入图片描述

夹具:启动和关闭服务器
在这里插入图片描述

举例:可回复消息用例
在这里插入图片描述
其余用例可 以上述用例为基础进行拓展

todotodo:
在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到