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】1037. Valid Boomerang 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 中学数学题 日期 题目地址:https://leet ...
- 【九度OJ】题目1474:矩阵幂 解题报告
[九度OJ]题目1474:矩阵幂 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1474 题目描述: 给定一个n*n的矩阵,求该矩阵的 ...
- 【LeetCode】637. Average of Levels in Binary Tree 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:DFS 方法二:BFS 日期 题目地址:ht ...
- vue安装使用v-chart时报错解决方案
npm i v-charts echarts -S 1.在main.js中使用报以下错 liquidFill echarts/lib/visual/dataColor 找不到 出现此原因是因为版本问题 ...
- Layui 的内置jquery 版本
//layui-v2.4.5 的内置jquery 版本. console.log(layui.$.fn.jquery);//=> 1.12.3 可以使用内置jq的方法: 方法一: layui.u ...
- 微信公众号开发--.net core接入
.net进行微信公众号开发的例子好像比较少,这里做个笔记 首先,我们需要让微信能访问到我们的项目,所以要么需要有一个可以部署项目的连接到公网下的服务器,要么可以通过端口转发将请求转发到我们的项目,总之 ...
- Swoole 中使用异步任务
执行异步任务 (Task) # server.php $serv = new Swoole\Server("127.0.0.1", 9501); // 设置异步任务的工作进程数量 ...
- 1.HTML基本结构、头部、注释
基本结构 1.HTML基本结构 <html> <head> <meta charset="utf-8"> ...
- CSS 基础 背景相关属性操作
1.background-color:red : //设置背景颜色为红色,rgb(0,0,0)和transparent 均为透明颜色 2.background-image(可缩bgi写用tab键) 语 ...
- CSS 表格基本使用 案例
知识点普及: 表格是html中经常使用到的,简单的使用可能很多人都没问题,但是更深入的了解的人恐怕不多,下面我们先来看一下如何使用. <table>是<tr>的上层标签 < ...