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的更多相关文章

随机推荐

  1. 第十一节 JS事件基础

    空白点击事件(没什么用处,做个介绍) <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  2. [c/c++] programming之路(27)、union共用体

    共用体时刻只有一个变量,结构体变量同时并存 一.创建共用体的三种形式 #include<stdio.h> #include<stdlib.h> #include<stri ...

  3. Python脚本备份

    #!/usr/bin/python3 # -*- coding:utf- -*- # 保证源程序可以输入汉字 print bool([]) # 任何为零的数字或空集(空列表.空元组和空字典等)均为Fa ...

  4. C# 模拟 HTTP POST请求

    /// <summary> /// 用于以 POST 方式向目标地址提交表达数据 /// 使用 application/x-www-form-urlencoded 编码方式 /// 不支持 ...

  5. 利用Java手写简单的httpserver

    前言: 在看完尚学堂JAVA300中讲解如何实现一个最简单的httpserver部分的视频之后, 一.前置知识 1.HTTP协议 当前互联网网页访问主要采用了B/S的模式,既一个浏览器,一个服务器,浏 ...

  6. Redis集群(主从模式)

    主从模型   在Redis的集群当中,每个节点(实例)都有一个身份:Master或者Slave,Master:主要负责数据写入,Slave一般提供数据读取,Master与Slave之间是一对多关系,M ...

  7. 11_vim

    vim编辑器 文本编辑器,字处理器linux重要哲学思想之一:使用纯文本格式来保存软件的配置信息,大多数情况下都是如此,而且一切皆文件此前学过nano,sed..nano入门简单,但功能简陋 vi:V ...

  8. 承接微信小程序外包 H5外包就找北京动点软件开发团队

    承接小程序外包 微信小程序外包 H5外包 就找北京动点软件 长年承接微信小程序.微信公众号开发 全职的H5开发团队,开发过几十款微信小程序公众号案例 欢迎来电咨询,索取案例! QQ:372900288 ...

  9. JS 自由变量---JS 学习笔记(三) 补充

    自由变量:在 A 中作用域要用到的变量  x,并没有在 A 中声明,要到别的作用域中找到他,这个变量 x 就是自由变量.代码示例如下: var x = 20; function A (b) { ret ...

  10. react项目中实现元素的拖动和缩放实例

    在react项目中实现此功能可借助 react-rnd 库,文档地址:https://github.com/bokuweb/react-rnd#Screenshot .下面是实例运用: import ...