一、复习

# 解决黏包问题
#为什么会出现黏包问题# 首先只有在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模块相关推荐

  1. Python之网络编程(socketserver模块详解、链接认证)

    文章目录 多线程对多客户端 socketserver 分类(2种) 12个类的继承关系(原理) socketserver的实现效果 认证链接的合法性 加盐(hmac) 对暗号 socketserver ...

  2. python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03

    python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03 参考文章: (1)python网络编程-异常处理-异常捕获-抛出异常-断言-自 ...

  3. python网络编程案例_Python 网络编程_python网络编程基础_python高级编程

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

  4. python网络编程证书_《Python网络编程基础》笔记

    python网络编程基础 ================== Author: lujun9972 Date: 2013-03-08 22:29:20 CST Table of Contents == ...

  5. python网络编程爬虫_Python爬虫--网络编程

    Python 网络编程 Python提供两个基本的Socket模块: Socket,提供了标准的BSD Sockets API SocketServer, 提供了服务器中心类,可以简化网络服务器的开发 ...

  6. python网络编程内容_图解Python网络编程

    Python Python开发 Python语言 图解Python网络编程 本篇索引 (1)基本原理 本篇指的网络编程,仅仅是指如何在两台或多台计算机之间,通过网络收发数据包:而不涉及具体的应用层功能 ...

  7. Python-玩转数据-python网络编程

    Python-玩转数据-python网络编程 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络服 ...

  8. 真良心干货保姆级手把手教你Python网络编程,学不会我去你家教你

    Python网络编程 基本概念(计算机网络基础) IP地址与端口 IP地址 端口 网络通信协议 网络通信协议 网络协议的分层 TCP/UDP 套接字编程 socket()函数介绍 UDP 编程 实现U ...

  9. 树莓派 Python 网络编程 (Socket入门)

    树莓派  Python 网络编程 (Socket入门) 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络 ...

  10. python编程入门指南怎么样-学习python网络编程怎么入门

    第一部分底层网络学习 Python提供了访问底层操作系统Socket接口的全部方法,需要的时候这些接口可以提供灵活而强有力的功能. (1)基本客户端操作 在<python 网络编程基础>一 ...

最新文章

  1. 最佳学习方法(3)听课--听一反三
  2. pyhanlp 分词与词性标注
  3. php中如何让这段东西不显示出来,数据显示处理,该怎么处理
  4. python 学习5--matplotlib画图实践
  5. 那些对你说学历不重要,技术重要的人,他们大部分都是有学历的。
  6. 魔兽争霸3地图(WarIII Maps):梦若流星
  7. ap设置 维盟660g_New丨维盟双频百兆11ac入墙AP:WAP-3018穿墙效果不一样!
  8. UIAlertView, UIAlertViewController
  9. 基于JAVA+SpringBoot+Mybatis+MYSQL的个人理财系统
  10. android onscrolllistener判断到底部,android中RecycleView添加下滑到底部的监听示例
  11. Linux 常用函数
  12. 基于SSM的校园二手交易平台的设计与实现
  13. 七大工业机器人仿真软件,你知道哪些呢?
  14. 【历史上的今天】1 月 14 日:IBM 计算机先驱诞生;Windows 7 寿终正寝;诺基亚收购阿尔卡特
  15. java 信鸽推送demo_iOS中关于信鸽推送的使用demo详解
  16. 计算机桌面有阴影,电脑桌面图标有阴影怎么去掉
  17. Shell脚本之免交互
  18. Android studio 配置 jPBC 2.0.0
  19. 网络协议:HTTP的升级改进
  20. 练习题(困难) 百慕大三角 POJ1069

热门文章

  1. c#switch语句判断成绩_switch语句成绩等级例子
  2. ssrf漏洞内网渗透_渗透小白看了也能明白的SSRF
  3. python多线程写同一个文件_Python多线程快速写入文件,python,飞速
  4. Java内置锁——synchronized
  5. dram sram利用 利用_使用量子力学技术的新型超低功耗存储器或将取代DRAM和Flash...
  6. 猜拳游戏html,JavaScript中实现猜拳小游戏
  7. css div里引用em字体会变斜体_CSS文字加粗斜体[解决代码]
  8. springboot 上传文件解析入库_SpringBoot + easyexcel + WebUploader 实现文件上传并解析
  9. idea怎么给项目改名_微软改名部惹祸了
  10. ORACLE 12C 插入数据遇到 Error getting generated key or setting result to parameter object错误