python网络编程3-socketserver模块
一、复习
# 解决黏包问题
#为什么会出现黏包问题# 首先只有在TCP协议中才会出现黏包现象# 是因为TCP协议是面向流的协议# 在发送的数据传输过程中有缓存机制来避免数据丢失# 因此在连续发送小数据的时候,以及接收大小不符的时候都容易出现尿包现象# 本质还是因为我们在接收数据时不清楚发送数据的长短
# 解决黏包问题# 在传输大量数据之前先告诉接收端要发送的数据大小# 或者通过struct模块来定制协议
# struct模块#pack unpack# 模式‘i’# pack后的长度:4个字节# unpack后的数据是元组:元组的第一个元素才是pack的值
二、hmac加密问题
import hmac h=hmac.new() # secrect_key,你想进行加密的bytes h.digest() #密文的内容 hmac.compare_digest() #对比 密文 另外一个密文
例 验证客户端的合法性
server:
import socket
import os
import hmac
# os.urandom(32) # 随机生成32位字节
def check_conn(conn):msg=os.urandom(32) # 随机一段内容conn.send(msg)h=hmac.new(secrect_key,msg)digest=h.digest()client_digest=conn.recv(1024)return hmac.compare_digest(digest,client_digest)secrect_key=b'egg'
sk=socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()conn,addr=sk.accept()
res=check_conn(conn)
if res:print('合法客户端')conn.close()
else:print('不合法客户端')conn.close()
sk.close()
client:
import socket
import hmacsecret_key=b'egg'
sk=socket.socket()
sk.connect(('127.0.0.1',8080))
msg=sk.recv(1024)
h=hmac.new(secret_key,msg)
digest=h.digest()
sk.send(digest)
三、socketserver模块
server:
# socket tcp服务 同一时间只能和同一个客户通信
# socketserver tcp服务 同一时间和多个客户通信import socketserverclass MyServer(socketserver.BaseRequestHandler):def handle(self): #self.request 就相当于connwhile True:msg=self.request.recv(1024).decode('utf-8')if msg=='q':breakprint(msg)info=input('%s>>>'%msg[:2])self.request.send(info.encode('utf-8'))if __name__ =='__main__':server=socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyServer)# thread 线程 一个程序只有一个线程 一个线程就是调度cpu的最小单位# 只有用线程才能占用cpuserver.serve_forever()# bind、listen
# conn,addr=accept
# self.request=conn
# socket_server
#看源码方法:
# 第一 多个类之间的继承关系要先整理
# 每一个类中的方法,要大致列出来
# 所有的self对象调用要清楚的了解 到底是谁的对象
# 所有的方法调用要退回到最子类的类中开始寻找,逐级查看
client1:
import socket
sk=socket.socket()
sk.connect(('127.0.0.1',8080))
while True:msg=input('>>>')if msg=='q':sk.send(b'q')breaksk.send(('大众点评:'+msg).encode('utf-8'))ret=sk.recv(1024).decode('utf-8')print(ret)
sk.close()
client2:
import socket
sk=socket.socket()
sk.connect(('127.0.0.1',8080))
while True:msg=input('>>>')if msg=='q':sk.send(b'q')breaksk.send(('美团:' + msg).encode('utf-8'))ret=sk.recv(1024).decode('utf-8')print(ret)
sk.close()
运行结果:
参考自https://www.cnblogs.com/Eva-J/articles/8244551.html#_label5
python网络编程3-socketserver模块相关推荐
- Python之网络编程(socketserver模块详解、链接认证)
文章目录 多线程对多客户端 socketserver 分类(2种) 12个类的继承关系(原理) socketserver的实现效果 认证链接的合法性 加盐(hmac) 对暗号 socketserver ...
- python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03
python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03 参考文章: (1)python网络编程-异常处理-异常捕获-抛出异常-断言-自 ...
- python网络编程案例_Python 网络编程_python网络编程基础_python高级编程
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- python网络编程证书_《Python网络编程基础》笔记
python网络编程基础 ================== Author: lujun9972 Date: 2013-03-08 22:29:20 CST Table of Contents == ...
- python网络编程爬虫_Python爬虫--网络编程
Python 网络编程 Python提供两个基本的Socket模块: Socket,提供了标准的BSD Sockets API SocketServer, 提供了服务器中心类,可以简化网络服务器的开发 ...
- python网络编程内容_图解Python网络编程
Python Python开发 Python语言 图解Python网络编程 本篇索引 (1)基本原理 本篇指的网络编程,仅仅是指如何在两台或多台计算机之间,通过网络收发数据包:而不涉及具体的应用层功能 ...
- Python-玩转数据-python网络编程
Python-玩转数据-python网络编程 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络服 ...
- 真良心干货保姆级手把手教你Python网络编程,学不会我去你家教你
Python网络编程 基本概念(计算机网络基础) IP地址与端口 IP地址 端口 网络通信协议 网络通信协议 网络协议的分层 TCP/UDP 套接字编程 socket()函数介绍 UDP 编程 实现U ...
- 树莓派 Python 网络编程 (Socket入门)
树莓派 Python 网络编程 (Socket入门) 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络 ...
- python编程入门指南怎么样-学习python网络编程怎么入门
第一部分底层网络学习 Python提供了访问底层操作系统Socket接口的全部方法,需要的时候这些接口可以提供灵活而强有力的功能. (1)基本客户端操作 在<python 网络编程基础>一 ...
最新文章
- 最佳学习方法(3)听课--听一反三
- pyhanlp 分词与词性标注
- php中如何让这段东西不显示出来,数据显示处理,该怎么处理
- python 学习5--matplotlib画图实践
- 那些对你说学历不重要,技术重要的人,他们大部分都是有学历的。
- 魔兽争霸3地图(WarIII Maps):梦若流星
- ap设置 维盟660g_New丨维盟双频百兆11ac入墙AP:WAP-3018穿墙效果不一样!
- UIAlertView, UIAlertViewController
- 基于JAVA+SpringBoot+Mybatis+MYSQL的个人理财系统
- android onscrolllistener判断到底部,android中RecycleView添加下滑到底部的监听示例
- Linux 常用函数
- 基于SSM的校园二手交易平台的设计与实现
- 七大工业机器人仿真软件,你知道哪些呢?
- 【历史上的今天】1 月 14 日:IBM 计算机先驱诞生;Windows 7 寿终正寝;诺基亚收购阿尔卡特
- java 信鸽推送demo_iOS中关于信鸽推送的使用demo详解
- 计算机桌面有阴影,电脑桌面图标有阴影怎么去掉
- Shell脚本之免交互
- Android studio 配置 jPBC 2.0.0
- 网络协议:HTTP的升级改进
- 练习题(困难) 百慕大三角 POJ1069
热门文章
- c#switch语句判断成绩_switch语句成绩等级例子
- ssrf漏洞内网渗透_渗透小白看了也能明白的SSRF
- python多线程写同一个文件_Python多线程快速写入文件,python,飞速
- Java内置锁——synchronized
- dram sram利用 利用_使用量子力学技术的新型超低功耗存储器或将取代DRAM和Flash...
- 猜拳游戏html,JavaScript中实现猜拳小游戏
- css div里引用em字体会变斜体_CSS文字加粗斜体[解决代码]
- springboot 上传文件解析入库_SpringBoot + easyexcel + WebUploader 实现文件上传并解析
- idea怎么给项目改名_微软改名部惹祸了
- ORACLE 12C 插入数据遇到 Error getting generated key or setting result to parameter object错误