一,验证客户端合法性

#server端
import os
import hmac
import socket
secret_key = b'alex_sb'def auth(conn):msg = os.urandom(32) #生成一个随机的字符串conn.send(msg)   #发送到client端result = hmac.new(secret_key,msg)  #处理这个随机字符串,得到一个结果client_digest = conn.recv(1024)   #接收client端处理的结果if result.hexdigest() == client_digest.decode('utf-8'):print('是合法的连接')   #对比成功可以继续通信return Trueelse:print('不合法的连接')   #成功closereturn Falsesk = socket.socket()
sk.bind(('127.0.0.1',9000))
sk.listen()
conn,addr = sk.accept()
if auth(conn):print(conn.recv(1024))#正常的和client端进行沟通了
    conn.close()
else:conn.close()
sk.close()

#client端
import hmac
import socket
key = b'alex_sb'
def auth(sk):msg = sk.recv(32)result = hmac.new(key,msg)res = result.hexdigest()sk.send(res.encode('utf-8'))sk = socket.socket()
sk.connect(('127.0.0.1',9000))
auth(sk)
sk.send(b'upload')
# 进行其他正常的和server端的沟通
sk.close()

二,socketserver

import socketserver
#tcp协议的server端就不需要导入socket
# socketserver:进一步封装
#        ↓
# socket 底层模块class Myserver(socketserver.BaseRequestHandler):def handle(self):conn = self.requestwhile True:conn.send(b'hello')print(conn.recv(1024))server = socketserver.ThreadingTCPServer(('127.0.0.1',9000),Myserver)
server.serve_forever()

#server端
import socket
sk = socket.socket()
sk.bind(('127.0.0.1',9000))
sk.listen()
while True:conn,addr = sk.accept()while True:conn.send(b'hello')print(conn.recv(1024))#client端
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',9000))
while True:ret = sk.recv(1024)print(ret)sk.send(b'byebye')
sk.close()

三,blocking阻塞

# blocking 阻塞
import socket
sk = socket.socket()
sk.bind(('127.0.0.1',9000))
sk.setblocking(False)
sk.listen()
while 1:try:conn,addr = sk.accept() #如果没有人来连接我,我就不在这里等待,非阻塞print(sk)breakexcept BlockingIOError:pass
conn.recv(1024)

转载于:https://www.cnblogs.com/lianyeah/p/9663066.html

Day31 python基础--网络编程基础-socketserver相关推荐

  1. Java基础(网络编程基础)

    1.软件结构 C/S:客户端和服务器(QQ.微信) B/S:浏览器和服务器(火狐.IE.谷歌) 2.网络通信协议 网络通信协议: 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行 ...

  2. Python 之网络编程基础

    套接字(socket)初使用 基于TCP协议的socket tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 server端 import socket sk = socket.so ...

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

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

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

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

  5. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...

    python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程并行与并发同步与异步阻塞与非阻塞CPU密集型与IO密集型 线程与进程 进程 前言 ...

  6. python作品阐述_Python网络编程基础的作品鉴赏-

    Python网络编程基础的作品鉴赏 Python网络编佳入门图书!175个完整,实践出真知,SocketsDNS.Web Service.FTP.Email.SMTP.POP.IMAP.SocketS ...

  7. Python编程:从入门到实践+爬虫开发与项目实战+网络编程基础+项目开发实战

    给还在苦苦自学Python的小伙伴们分享一波学习教程~有了它们,至少能节省50%的时间,少走一半的弯路. 书不在多,而在于精~ <Python编程:从入门到实践>豆瓣评分9.2 本书是针对 ...

  8. 自学Python第十四天- 一些有用的模块:urllib、requests 网络编程基础,向爬虫靠拢

    自学Python第十四天- 一些有用的模块:urllib.requests 网络编程基础,向爬虫靠拢 fake_useragent 库 安装 fake_useragent 使用 urllib 库 ur ...

  9. 《python网络编程基础》PDF 下载

    <python网络编程基础> > 方式一: 链接:百度网盘下载地址 [ https://pan.baidu.com/s/1BiDw-gVKGrLbgUnqHUt1qQ ] 提取码:4 ...

最新文章

  1. ObservableCollection排序
  2. 第二十七讲 微分方程组解的图像
  3. python脚本在命令行中传递参数(附字符查找小案例)
  4. 中断系统详解、外部中断
  5. LeetCode 628. 三个数的最大乘积
  6. c++ 输出二进制_C语言 printf 格式化输出的详细示例
  7. 嵩天python123测试3_嵩天老师python123测验3: 基本数据类型 (第3周)
  8. Retinex算法的C++/opencv实现
  9. vue.js快速入门 1
  10. steer clear of用法
  11. ps抠图 淘宝抠图
  12. 华为手机更新EIMU10之后google play 商店消失
  13. 获取远程资源提示msxml3.dll指定资源下载失败
  14. 冯·诺依曼结构:现代计算机的诞生
  15. 洛谷P4495 奇怪的背包 [HAOI2018] 数论
  16. 517.Super Washing Machines
  17. Shell攻关之条件判断与流程控制
  18. Unity3d物理引擎
  19. google的新闻(文章)分类算法
  20. 智能卡系统设计之文件系统

热门文章

  1. BugkuCTF-MISC题baby_flag.txt
  2. 分包组包 北斗通信_蓝牙mesh底层传输层(分包和组包)
  3. vim复制、删除和粘贴一行
  4. bellman ford java_Java C 实现Bellman-ford算法
  5. java+set+split_阿里资深工程师教你如何优化 Java 代码!
  6. android 常用命令,Android开发常用命令整理
  7. 未定义变量: data_三、变量声明
  8. 计算机应用全能,全能计算助手
  9. mysql环形复制的弊端_Docker+阿里云centos7+MySQL主从环形复制踩坑记
  10. linux内核更新 2.6.38,Linux内核 2.6.38版本预计到四月初完成