网络编程IO

客户端流程

代码实现:day4/tcp_client.py![ ](https://img-blog.csdnimg.cn/20191129212407203.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTgxOTg4MA==,size_16,color_FFFFFF,t_70
在这里插入图片描述

  1. 创建套接字
    注意:只有相同类型的套接字才能进行通信
  2. 请求连接
    sockfd.connect(server_addr)
    功能:连接服务器
    参数:元组 服务器地址
  3. 收发消息
    注意: 防止两端都阻塞,recv send要配合
  4. 关闭套接字

tcp 套接字数据传输特点

tcp连接中当一端退出,另一端如果阻塞在recv,此时recv会立即返回一个空串。

tcp连接中如果一端已经不存在,仍然试图通过send发送则会产生BrokenPipeError

一个监听套接字可以同时连接多个客户端,也能够重复被连接

网络收发缓冲区

  1. 网络缓冲区有效的协调了消息的收发速度
  2. send和recv实际是向缓冲区发送接收消息,当缓冲区不为空recv就不会阻塞。

tcp粘包

原因:tcp以字节流方式传输,没有消息边界。多次发送的消息被一次接收,此时就会形成粘包。
影响:如果每次发送内容是一个独立的含义,需要接收端独立解析此时粘包会有影响。
处理方法

  1. 人为的添加消息边界
  2. 控制发送速度

UDP套接字编程

服务端流程

在这里插入图片描述
代码实现:day4/udp_server.py

  1. 创建数据报套接字
    sockfd = socket(AF_INET,SOCK_DGRAM)
  2. 绑定地址
    sockfd.bind(addr)
  3. 消息收发
  4. 创建数据报套接字
    sockfd = socket(AF_INET,SOCK_DGRAM)
  5. 绑定地址
    sockfd.bind(addr)
  6. 消息收发

客户端流程

在这里插入图片描述
代码实现:day4/udp_client.py

  1. 创建套接字
  2. 收发消息
  3. 关闭套接字
    总结 :tcp套接字和udp套接字编程区别
  4. 流式套接字是以字节流方式传输数据,数据报套接字以数据报形式传输
  5. tcp套接字会有粘包,udp套接字有消息边界不会粘包
  6. tcp套接字保证消息的完整性,udp套接字则不能
  7. tcp套接字依赖listen accept建立连接才能收发消息,udp套接字则不需要
  8. tcp套接字使用send,recv收发消息,udp套接字使用sendto,recvfrom

socket套接字属性

代码实现:day4/sock_attr.py
【1】 sockfd.type 套接字类型
【2】 sockfd.family 套接字地址类型
【3】 sockfd.getsockname() 获取套接字绑定地址
【4】 sockfd.fileno() 获取套接字的文件描述符
【5】 sockfd.getpeername() 获取连接套接字客户端地址
【6】 sockfd.setsockopt(level,option,value)
功能:设置套接字选项
参数: level 选项类别 SOL_SOCKET
option 具体选项内容
value 选项值
在这里插入图片描述

struct模块进行数据打包

代码实现:day5/struct_recv.py
代码实现:day5/struct_send.py

  1. 原理: 将一组简单数据进行打包,转换为bytes格式发送。或者将一组bytes格式数据,进行解
    析。
  2. 接口使用
    Struct(fmt)
    功能: 生成结构化对象
    参数:fmt 定制的数据结构
    st.pack(v1,v2,v3…)
    功能: 将一组数据按照指定格式打包转换为bytes
    参数:要打包的数据
    返回值: bytes字节串
    st.unpack(bytes_data)
    功能: 将bytes字节串按照指定的格式解析
    参数: 要解析的字节串
    返回值: 解析后的内容
    struct.pack(fmt,v1,v2,v3…)
    struct.unpack(fmt,bytes_data)
    说明: 可以使用struct模块直接调用pack unpack。此时这两函数第一个参数传入fmt。其他用法功能相同
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值