python30day
内容回顾
tcp协议的多人多次通信
- 和一个人通信多说句话
- 和一个人聊完再和其他人聊
- bind 绑定一个id和端口
- socket()tcp协议的server
- listen 监听,代表socket服务的开启
- accept 和客户端建立连接的过程
- send 直接通过连接发送消息,不需要地址
- recv 只接收消息
- connect 客户端、tcp协议的方法,和server端建立连接
- close 关闭服务、连接
udp协议的多人通信
- socket(type=socket.SOCK_DGRAM)
- sendto 需要写一个对方的地址
- recvfrom 接收消息和地址
- close 关闭服务、连接
每句话什么意思?执行到哪程序等待、阻塞、结束阻塞?
- input() 等待
- accept 阻塞,有客户端来和我建立连接就结束阻塞
- recv 阻塞,直到收到对方发来的消息结束阻塞
- recvfrom 阻塞
- connect 阻塞,直到server端结束了对一个client的服务,开始和当前client建立连接的时候结束阻塞
粘包现象
- 什么是粘包
- 两条或更多条分开发送的信息连在一起
- 发生在发送端:发送间隔短,数据小,由于优化机制就合并在一起发送了
- 发送在接收端:接收不及时,所以数据就在接收方的缓存端黏在一起了
- 粘包发生的本质:tcp协议的传输是流式传输,数据与数据之间没有边界
- 怎么解决粘包:自定义协议 struct模块
- 发送端
- 先发送四字节的数据长度
- 再按照长度发送数据
- 接收端
- 先接受四字节 知道数据长度
- 再按照长度接收数据
- 发送端
- 什么是粘包
tcp文件传输
import socket
import json
#接收
sk=socket.socket() #创建套接字
sk.bind(('127.0.0.1',9000)) #绑定端口
sk.listen() conn,_=sk.accept()
msg=conn.recv(1024).decode('utf-8')
print(msg)
msg=json.loads(msg) with open(msg['filename'],'wb')as f:
content=conn.recv(msg['filesize'])
print('---->',len(content))
f.write(content) conn.close()
sk.close()
import socket
import os
import json
# 发送
sk=socket.socket() #创建套接字
sk.connect(('127.0.0.1',9000)) # 文件名、文件大小
abs_path=r'E:\Py Project\day30\tmp'
filename=os.path.basename(abs_path)
filesize=os.path.getsize(abs_path)
dic={'filename':filename,'filesize':filesize}
str_dic=json.dumps(dic)
sk.send(str_dic.encode('utf-8')) with open(abs_path,mode='rb') as f:
content=f.read()
sk.send(content) sk.close()
今日内容
tcp协议的自定义协议解决粘包问题
验证客户端合法性
并发的tcp协议server端---socketserver
代码总行数3030+41=3047行
python30day的更多相关文章
随机推荐
- 【LeetCode】459. Repeated Substring Pattern 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历子串 日期 [LeetCode] 题目地址:ht ...
- 【LeetCode】1051. Height Checker 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 排序比较 日期 题目地址:https://leetc ...
- Interesting Yang Yui Triangle(hdu3304)
Interesting Yang Yui Triangle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- 亲测:三个值得练手的Java实战项目
测试奇谭,BUG不见. 大家好,我是谭叔. 一提到编码,很多小伙伴便感到头疼,特别是半路转行的小伙伴或者没有系统学习过计算机基础的小伙伴. 对于想学而不知道怎么学的小伙伴,我可以分享下我的策略: 刷一 ...
- 第四十六个知识点 在Sigma协议中,正确性,公正性和零知识性意味着什么
第四十六个知识点 在Sigma协议中,正确性,公正性和零知识性意味着什么 Sigma协议 Sigma协议是Alice想要向Bob证明一些东西的协议(Alice知道一些秘密).他们有下面的一般范式:Al ...
- matplotlib 进阶之Customizing Figure Layouts Using GridSpec and Other Functions
目录 对Gridspec的一些精细的调整 利用SubplotSpec fig.add_grdispec; gs.subgridspec 一个利用Subplotspec的复杂例子 函数链接 matplo ...
- 对vector和map容器的删除元素操作
/** * 删除头部元素 * 切割map到指定的个数 * @param map * @param i * @return */ map<int, Rect> PublicCardFrame ...
- 编写Java程序,使用 Java 的 I/O 流将 H:\eclipse.zip 文件拷贝至 E 盘下,重新命名为 eclipse 安装 .zip。
查看本章节 查看作业目录 需求说明: 使用 Java 的 I/O 流将 H:\eclipse.zip 文件拷贝至 E 盘下,重新命名为 eclipse 安装 .zip.在拷贝过程中,每隔2000 毫秒 ...
- 图像数据到网格数据-2——改进的SMC算法的实现
概要 本篇接上一篇继续介绍网格生成算法,同时不少内容继承自上篇.上篇介绍了经典的三维图像网格生成算法MarchingCubes,并且基于其思想和三角形表实现了对样例数据的网格构建.本篇继续探讨网格生成 ...
- NIO【同步非阻塞io模型】关于 文件io 的总结
1.前言 这一篇随笔是写 NIO 关于文件输入输出的总结 /* 总结: 1.io操作包括 socket io ,file io ; 2.在nio模型,file io使用fileChannel 管道 , ...