day25_python_1124
1.内容回顾
2.作业讲解
3.今日作业
4.粘包问题
5.tcp和udp
6.udp-socket
7.udp-socket 多人聊天
8.socketserver-tcp-socket并发
9.pickle模块的补充
1.内容回顾
# socket 套接字
# tcp协议 三次握手和四次挥手
# 如何基于tcp协议来完成一个socket网络通信
# 聊天的小程序
# 时间同步的
# 粘包现象
# 为什么会出现粘包现象:
# 本质 : 接收端不知道发送端发送的数据长度是多少
# tcp协议本身的特点导致的 :
# 流式传输、无边界
# 合包机制
# 缓存机制
# 拆包机制
# 如何解决这个问题的?
# 自定义协议 :先发送要传递数据的字节长度,再发送数据
# 接受端先接收4个字节,然后再根据长度接受数据
2.作业讲解
3.今日作业
# 1.完成一个在网络上对文件的传输(进阶需求 如果这个文件非常大 2个G)
# 1)完成文件的下载
# 2)把用户认证这个功能加上
# 必须先认证 再进行上传下载
# 3)文件的一致性校验
# 2.练习一些udp协议的操作
# 3.使用socketserver实现一个并发的基于tcp协议的多人聊天
# 网编的大作业
4.粘包问题
# 1.两个连续的send就会发生粘包
# 2.用struct自定义协议可以解决粘包问题
# 3.什么情况下我们不需要解决粘包 : 文件的传输
# 4.自定义协议的进阶版本
# 先发送字符串的长度,再发送字符串
# 先发送json的长度,再发送json,json的字典中包含着下一条信息的长度,然后按照长度接受
5.tcp和udp
# tcp
# 面向连接的 可靠的 全双工的 流式传输
# 面向连接 :同一时刻只能和一个客户端通信
# 三次握手、四次挥手
# 可靠的 :数据不丢失、慢
# 全双工 :能够双向通信
# 流式传输 :粘包 无边界
# udp
# 无连接的 面向数据包 不可靠的 快速的
# 无连接的 :不需要accept/connect 也没有握手
# 面向数据包的 :不会粘包
# 不可靠的 :没有自动回复的机制
# 快速的 :没有那些复杂的计算、保证数据传输的机制
6.udp-socket
server
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)sk.bind(('127.0.0.1',9600))
msg,clt_addr = sk.recvfrom(1024)print(msg)sk.sendto(b'hi',clt_addr)
sk.close()
client
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.sendto(b'hello',('127.0.0.1',9600))msg,addr = sk.recvfrom(1024)print(msg)sk.close()
7.udp-socket 多人聊天
server
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)sk.bind(('127.0.0.1',9600))while True: msg,clt_addr = sk.recvfrom(1024) print(msg.decode()) content = input('>>>') sk.sendto(content.encode(),clt_addr)
sk.close()
client
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
while True: content = input('>>>') content = '%s : %s'%('wusir',content) sk.sendto(content.encode(),('127.0.0.1',9600)) msg,addr = sk.recvfrom(1024) print(msg.decode())
sk.close()
8.socketserver-tcp-socket并发
server
import socketserver
class Myserver(socketserver.BaseRequestHandler): def handle(self): conn = self.request while True: conn.send(b'hello')
server = socketserver.ThreadingTCPServer(('127.0.0.1',9600),Myserver)server.serve_forever()
client #多个
import socket
sk = socket.socket()sk.connect(('127.0.0.1',9600))while True: msg = sk.recv(1024) print(msg)sk.close()
9.pickle模块的补充
import pickleclass Course: def __init__(self,name,period,price,teacher): self.name = name self.period = period self.price = price self.teacher = teacher
python = Course('python','6 months',19800,'太亮')linux = Course('linux','5 months',15800,'赵班长')with open('course_info','wb') as f: pickle.dump(python,f) pickle.dump(linux,f)with open('course_info','rb') as f: while True: try: obj = pickle.load(f) print(obj.__dict__) except EOFError: break
# dumps str->bytes
# dump str->文件里的bytes
# 1.json能处理的数据类型有限,但是所有语言通用
# pickle支持python中几乎所有对象,但是只能再python语言中使用
# 2.json的dumps的结果str,pickle dumps的结果是一个bytes
# 3.json不能连续dump多个数据到文件中
# pickle可以
day25_python_1124的更多相关文章
随机推荐
- java网络编程学习之NIO模型
网上对NIO的解释有很多,但自己一直没有理解,根据自己的理解画出下面这个图,有什么不对的地方,欢迎留言指出. 理解是,客户端先与通过通道Channel与连接(注册到服务器端),然后再传送数据,服务器端 ...
- Liunx网络技术管理及进程管理
Linux网络技术管理及进程管理(week2_day4) OSI七层模型和TCP/IP四层模型 OSI七层模型:OSI(Open System Interconnection)开放系统互连参考模型 ...
- Python爬虫与一汽项目【综述】
项目来源 这个爬虫项目是 去年实验室去一汽后的第一个项目(基本交工,现在处于更新维护阶段).内容大概是,获取到全国31个省份政府的关于汽车的招标公告,再用图形界面的方式展示爬虫内容.在完成政府招标采购 ...
- vue 3.0的搭建
1. 删除以前的vue 2.x版本,并下载3.x版本 npm uninstall -g vue-cli / yarn global remove vue-cli npm install -g @vue ...
- JZ2440学习笔记之中断
.extern main .text .global _start _start: @********************************************************* ...
- "做中学"之“极客时间”课程学习指导
目录 "做中学"之"极客时间"课程学习指导 所有课程都可以选的课程 Java程序设计 移动平台开发 网络攻防实践 信息安全系统设计基础 信息安全专业导论 极客时 ...
- Thuwc 2019 & wc 2019 划水记
(此处不应有目录,爆零的过程应该慢慢看) Thuwc 2019 拖着箱子去广二,然后发现可以搬出去住酒店.好,然后箱子白搬了.Joker似乎说住宿体验极差,广二宿舍和林荫宿舍质量不相上下,想想wc时要 ...
- HTML DOM submit() 方法
HTML DOM submit() 方法 HTML DOM Form 对象 定义和用法 submit() 方法把表单数据提交到 Web 服务器. 语法 formObject.submit() 说明 该 ...
- Spring Boot 监控利器 —— Actutor
参考 CSDN-学习Spring Boot:(二十七)Spring Boot 2.0 中使用 Actuator 使用Actuator监控Spring Boot应用 程序猿DD-Spring Boot ...
- python链接mysql获得某列最大值
import pymysqlconn = pymysql.connect(host='10.1.2.198', port= 3306 ,user='root',passwd='123456',db=' ...