Day31 python基础--网络编程基础-socketserver

一,验证客户端合法性

#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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

康乐php一键脚本,kangle一键脚本

脚本简介1、本脚本是可以一键安装kangleEasypanelmysql商业集合脚本。2、脚本本身集成:PHP5.3、PHP5.4、PHP5.5、PHP5.6、PHP7.1、PHP7.2、PHP7.3、MYSQL5.63、支持前台用户任意切换PHP5.3-7.3以适应网站程序Kangle一键脚本特点1.安装包内PHP套件以及Kangle套件均已…

oracle data guard方案,Oracle Data Guard 概念篇

一个Data Guard 配置由一个生产库和一个或者多个standby数据库组成,在Data Guard配置中,主库和备库都既可以是rac环境,也可以是单机环境。这篇文章主要介绍dataguard的一些基本知识dataguard的分类、dataguard的服务类型、dataguard的保护模式…

洛谷P4133 [BJOI2012]最多的方案(记忆化搜索)

题意 题目链接 求出把$n$分解为斐波那契数的方案数&#xff0c;方案两两不同的定义是分解出来的数不完全相同 Sol 这种题&#xff0c;直接爆搜啊。。。 打表后不难发现$<1e18$的fib数只有88个 最先想到的应该是直接把$n$加入到搜索状态里&#xff0c;然后枚举能被分成哪些 但…

centos一键安装redmine

官网给出的环境要求&#xff1a; http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Requirements ------------------------------------------------------------------------------------------------------------- 下载一键安装&#xff1a;&#xff08;下载…

大话php设计模式视频,大话PHP设计模式

工厂模式用工厂方法或者类来实例化对象&#xff0c;而不是直接new。首先我们需要创建一个工厂类&#xff0c;比如Factory.php。如果不使用工厂模式的&#xff0c;我们需要一个对象的时候通常需要new Inexistence\girlfriend();然而我们一般不只在一个地方需要这个对象&#xff…

Git 2.19 对Diff、Branch和Grep等做了改进

\Git的最新版带来了丰富的新功能以及内部更新&#xff0c;包括改进的diff、branch和grep&#xff0c;更好的命令行补全&#xff0c;新的range-diff命令等。\\Git diff现在可以正确地标记以intent-to-add参数添加的新文件路径。intent-to-add可以和git add命令一起使用&#xff…

su oracle c expdp,expdp/impdp 数据泵导入导出

useridtest/test --导出的用户&#xff0c;本地用户!!directorydmpfile --导出的逻辑目录&#xff0c;一定要在oracle中创建完成的&#xff0c;并且给用户授权读写权限dumpfilexx.dmp --导出的数据文件的名称&#xff0c;如果想在指定的位置的话可以写…

Centos 升级GLIBCXX3.4.25

32位系统: http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc6_4.7.2-5_i386.deb 64位系统: wget http://ftp.de.debian.org/debian/pool/main/g/gcc-8/libstdc6_8.2.0-7_amd64.deb 其他版本 http://ftp.de.debian.org/debian/pool/main/g/ 解压 ar -x libst…

美团点评基于MGR的CMDB高可用架构搭建之路【转】

王志朋 美团点评DBA 曾在京东金融担任DBA&#xff0c;目前就职于美团点评&#xff0c;主要负责金融业务线数据库及基础组件数据库的运维。 MySQL Group Replication&#xff08;以下简称MGR&#xff09;&#xff0c;于5.7.17版本正式GA&#xff0c;由Oracle官方出品&#xff0c…

使用 redmind 进行项目任务管理

一、项目经理 1.1、新建任务(工单) 1.2、查看任务状态 二、团队成员 2.1、查看任务 作为这个团队的成员之一&#xff0c;每天开工第一件事便是进入redmine查看“我的工作台”中自己的任务 2.2、每日反馈任务完成状态 1、每天开始工作时&#xff0c;及时将任务状态从“新…

oracle11g创建表空间大文件,oracle11g创建表空间 sql语法

--oracle 11g创建有限制大小的永久表空间--create tablespace test--datafile F:\app\shan\product\11.2.0\dbhome_1\oradata\test.dbf size 1M--autoextend on next 2M maxsize 1024M;--修改表空间大小&#xff1a;--alter database datafile F:\app\shan\product\11.2.0\dbho…

内存泄漏优化

目录介绍&#xff1a; 1.什么是内存泄漏2.内存泄漏造成什么影响3.内存泄漏检测的工具有哪些4.关于Leakcanary使用介绍5.Leakcanary捕捉常见的内存泄漏及解决办法 5.0.1 错误使用单例造成的内存泄漏5.0.2 错误使用静态变量&#xff0c;导致引用后无法销毁5.0.3 [常见]Handler使用…

redmine更换主题

主题列表&#xff1a;http://www.redmine.org/projects/redmine/wiki/Theme_List 虽然有很多主题&#xff0c;但是很多主题都是要钱的&#xff0c;像这类&#xff08;上图&#xff09;没有下载地址的&#xff0c;都是要钱的。 含GitHub的下载地址的&#xff0c;是免费可下载的&…

redmine 邮箱配置(阿里云+windows)

说明 密码是第三方的授权码&#xff0c;不是邮箱密码 需要登录126网页版&#xff0c;在设置里开启 smtp 等第三方服务&#xff0c;设置授权码 阿里云Linux 默认屏蔽25号端口&#xff0c;所以需要开启ssl&#xff0c;和使用 465 端口 重启下 redmind sh /opt/redmine-3.4.6-…

linux查看当前用户终端,Linux----基本命令的使用(vi命令,查看文件内容,显示进程,切换用户等)...

1、vi是linux系统上经常使用的一个文本编辑器&#xff0c;其有三种模式&#xff1a;命令模式、编辑模式(插入模式)、末行模式。命令模式——>编辑模式&#xff1a;“i a o I A O”linux编辑模式——>命令模式&#xff1a;“ESC”shell命令模式——>末行模式&#xff1…

centos6.8 环境一键安装包 nginx配置thinkphp5

---恢复内容开始--- lnmp1.4 一键安装包 nginx配置thinkphp5 环境&#xff1a;Nginx1.12.1 PHP5.6 Coentos6.8 修改网站配置文件 server{listen 443 ssl http2;#listen [::]:443 ssl http2;server_name xxx.cn;index index.html index.htm index.php default.html default.ht…

Linux下BitNami Redmine的插件安装与更新

截至2017年3月27日&#xff0c;Redmine-3.3.2-2安装以下的15款插件全部成功并通过测试&#xff08;下面显示为插件正确文件夹名&#xff09;&#xff1a; easy_wbs redmine_ckeditor 提供所见即所得编辑器 redmine_graphs 提供部分问题图表功能 progressive_projects_list 是…

linux 进程 读写锁,linux 下实现高性能读写锁(read/write lock)

前一篇文章分析了Windows slim read/write lock的工作原理。我们知道它的设计相当精妙&#xff0c;于是我们可以借鉴它的思路来设计linux下的读写锁。在这个读写锁的设计上&#xff0c;需要注意的是linux和windows有以下几点区别&#xff1a;(1)windows使用的keyedevent机制需要…

Linux下redmine安装插件报错

报错如下&#xff1a; There was an error parsing Gemfile: compile error - syntax error, unexpected :, expecting $end gem tzinfo-data, platforms: [:mingw, :x64_mingw, :mswin, :jruby]^. Bundler cannot continue. 原因是&#xff1a; redmine不同版本对ruby版本有…

ajax post 提交无法进入controller 请求200

最近写js遇到个问题&#xff1a; 用ajax的post方式给后台提交数据&#xff0c;页面200&#xff0c;但是不进入controller 断点&#xff0c;我以为我post参数不对。 网上查的&#xff1a; 1.说路径不对&#xff0c;但是我通过get方式是可以进入的&#xff0c;路径是没问题的&…