socketserver模块用法,多道技术、 基于UDP的简易版QQ
复习
1、OSI七层2、以太网协议3、ip协议(arp协议)4、TCP5、UDP
OSI七层
应表会 # 应用层 (HTTP协议, FTP协议)传输层 # 端口协议 在此层发挥作用网络层 # IP协议 在此层发挥作用数据链路层 # 以太网协议(arp协议) 在此层发挥作用物理连接层
以太网协议
1、规定了电信号的分组方式2、每台计算机都必须有一块网卡,网卡上可有12位16进制的编号 前6位代表生产厂家, 后6位代表生产流水线 我们把这个编号称之为mac地址以太网协议特点:通信基本靠吼缺点:广播风暴
ip协议(arp协议) | 端口
ip协议规定任何结束互联网的计算机都必须拥有一个独一无二的地址版本:ivp4 | ivp6特点:点分十进制作用:能够标识全世界独一无二的一台计算机port(端口): 标识计算机中唯一一个基于网络通信的应用程序 范围:0 - 65535 0 - 1024 被系统占用 MySQL:3306 Redis:6379 Flask:5000 Django:8000 ip+port:标识唯一一台计算机上的唯一联网通信的应用程序arp协议:根据ip地址解析mac地址
TCP
三次握手四次挥手粘包问题: 1、发送方因流式协议一次性发送短间隔数据量小的数据 2、接收方不知道要接受的长度
今日内容
1、UDP2、socketserver模块3、并发编程概念
UDP
数据报协议没有双向通道1、UDP协议不存在粘包问题2、客户端可以发空3、UDP可以实现并发4、服务端不存在也不影响客户端往服务端发送数据示例:# server端:import socketserver = socket.socket(type=socket.SOCK_DGRAM) # 要表明 type=UDP的标识符server.bind(('127.0.0.1', 8080))data, addr = server.recvfrom(1024)# 接收结果为一个元组,第一个值为真实数据,第二个为客户端地址server.sendto(data.upper(), addr) # 发送命令后要加客户端addr# client端import socketclient = socket.socket(type=socket.SOCK_DGRAM)server_addr = ('192.0.0.1', 8080)client.sendto(b'hello', server_addr)data, addr = client.recvfrom(1024)print(data.decode('utf-8'))
基于UDP实现简易版本的QQ
# 服务端import socketserver = socket.socket(type=socket.SOCK_DGRAM)server.bind(('127.0.0.1', 8080))while True: msg, addr = server.recvfrom(1024) print(addr) print(msg.decode('utf-8')) info = input('>>>:').encode('utf-8') server.sendto(info, addr)server.close()# 多个客户端import socketclient = socket.socket(type=socket.SOCK_DGRAM)server_addr = ('127.0.0.1', 8080)while True: info = input('>>>:') info = ('来自客户端1的消息:%s'%info).encode('utf-8') # 改中文备注即可 client.sendto(info, server_addr) msg, addr = client.recvfrom(1024) print(msg.decode('utf-8'), addr)client.close()
小知识点补充:
windows电脑和max电脑的时间同步功能,其实就是基于UDP朝windows,mac服务器发送请求获取标准时间
TCP/UDP
TCP:打电话UDP:发短信
socketserver模块
1、能够实现并发效果 并发:看起来像同时运行就叫并发TCP与UDP中,socketserver用法相同示例:server端:import socketserverclass MyServer(socket.BaseRequestHandler): def handle(self): try: 循环通信代码块 # TCP则是recv, send # UDP则是recvfrom, sendto except ConnectionReseError: breakif __name__ == '__main__': server = socket.ThreadingTCPServer(('127.0.0.1', 8080), MyServer) # 上面一句代绑定地址与通信循环的代码, 在UDP中的写法是: # server = socket.ThreadingUDPServer(('127.0.0.1', 8080), MyServer) server.server_forever() client端:客户端写法不变,该是TCP就按TCP的写法来,该是UDP就按UDP的写法来
并发编程发展史
因为CPU利用率低,所以研发出了多道技术多道技术: - 空间上的复用(多个程序共一套硬件设备,它是多道技术实现时间上的复用的基础, 不然还要去硬盘读数据) - 时间上的复用(单个cpu的电脑上,起多个应用程序。cpu快速切换,给人的感觉是同时运行) cpu两种情况下才会切换:(先保存当前程序的运行状态) - 一个任务占用cpu时间过长或被操作系统强行剥夺走cpu的执行权限(比起串行效率反而降低) - 一个任务执行过程中遇到io操作,也会被操作系统强行剥夺走cpu的执行权限(比起串行效率提高)
并发:看上去像同时进行的并行:同时进行补充:单核的计算机不可能实现并行
转载于:https://www.cnblogs.com/shuchengyi/articles/10815817.html
socketserver模块用法,多道技术、 基于UDP的简易版QQ相关推荐
- 基于Zookeeper实现简易版服务的注册与发现机制
一.功能要求 基于Zookeeper实现简易版服务的注册与发现机制 启动2个服务端 将服务端IP和端口信息注册到Zookeeper上 启动1个客户端 从Zookeeper中获取2个服务端节点信息 客户 ...
- 基于Python pygame简易版斗兽棋小游戏源代码
基于Python pygame简易版斗兽棋小游戏源代码 游戏规则如下: 胜利条件: 1.吃掉对方全部棋子 2.走入对方兽穴(不可进入自己洞穴) 吃法: 1.象>狮>虎>豹>狼& ...
- 基于C++的简易版《球球大作战》游戏设计
全套资料下载地址:https://download.csdn.net/download/sheziqiong/85602628 全套资料下载地址:https://download.csdn.net/d ...
- 基于UDP的简易多人聊天室
1.服务器 1.服务器采用了线程进行编写,这样可以共享链表,比较简单. 2.实现思路:由客户端发送消息(内容包含:客户端自定义的名字.客户端发送消息的类别.客户端发送的消息内容),服务器接收到消息后根 ...
- 基于JAVA实现简易版泡泡堂小游戏
一.简介--童年记忆 <泡泡堂>是由韩国游戏公司Nexon开发的一款休闲游戏(Casual Game),于2003年在中国大陆上线,由盛大网络运营.游戏讲述了在哈巴森林的一个村落的村民们利 ...
- [源码和文档分享]基于JAVA实现简易版泡泡堂小游戏
一.简介--童年记忆 <泡泡堂>是由韩国游戏公司Nexon开发的一款休闲游戏(Casual Game),于2003年在中国大陆上线,由盛大网络运营.游戏讲述了在哈巴森林的一个村落的村民们利 ...
- python socket udp并发_Python进阶----UDP协议使用socket通信,socketserver模块实现并发
Python进阶----UDP协议使用socket通信,socketserver模块实现并发 一丶基于UDP协议的socket 实现UDP协议传输数据 代码如下:
- 基于Zookeeper实现简易的负载均衡
基于Zookeeper实现简易的负载均衡 完整代码在这里基于Zookeeper实现简易的负载均衡 以下是讲解 一. 要求 1. 编程题一: 在基于Netty的自定义RPC的案例基础上,进行改造.基于Z ...
- 基于UDP协议的套接字+socketserver模块
基于UDP协议的套接字 user datagram protocal 数据报协议 无双向通道.自带报头.类似发短信.不会粘包 不可靠:数据发送时,丢就丢了 UDP socket: 服务端: impor ...
最新文章
- 数组运用_1-19 编程练习
- catch里面不想做任何处理_Java 如何优雅处理 Exception? 看完这 9 个示例你秒懂
- nginx 如何调用php文件,nginx php-fpm问题无法调用文件夹中的其他php文件
- c++ 方向_GE医疗C型臂系列手术机设备全球装机量破万
- SQL server 复习一
- 探索比特币源码8-哈希2
- NSLayoutConstraint 使用详解 VFL使用介绍
- php pdo批量操作,PDO使用二维数组批量操作MYSQL数据库
- PMP搞心态,解读最新『三大领域』考试内容:(附上第7版教材)
- android Textview属性细节以及EditText属性
- The Productive Programmer 读书笔记
- 陪孩子的周日-20220123
- Macbook查看隐藏文件
- hadoop文件存储位置_hadoop – HDFS存储数据的位置
- mysql插入路径_Conventional-pathinsert(传统路径插入)
- 微信第三方登陆实现-微信浏览器实现弹出提示授权非微信浏览器提供二维码
- 怎么查看笔记本内存条型号_新买的笔记本如何查看笔记本内存条型号有哪些方法...
- Python PEP8 代码规范常见问题及解决方法
- 新手建站之【域名解析】⑦
- 十个著名思维实验的思考
热门文章
- python中哪里用到缩进_Python编程常见十大错误
- python中画圆的代码_Python编程12:Python画图之turtle库如何画圆
- Vmware 下安装Arch Linux
- A Way Of Leader
- 清华唐杰:GPT-3表示能力已经接近人类了,但它有一个阿喀琉斯之踵 | MEET 2021...
- 这个比肩ImageNet的数据集遭MIT紧急下架,原因令人愤怒
- XML之父愤然离职亚马逊!看不惯公司疫情期间种种作为,百万年薪不要了
- MLPerf发布首个AI芯片推理测试排行榜:阿里平头哥含光800获得多项第一
- Python每日一练0004
- 服务器市场步步为营:Intel发布新款至强Xeon E5-4600v4四路处理器