当前位置: 首页 > 编程日记 > 正文

python socket tcp客户端_python网络编程socketserver模块(实现TCP客户端/服务器)

摘录python核心编程

socketserver(python3.x版本重新命名)是标准库中的网络编程的高级模块。通过将创建网络客户端和服务器所必须的代码封装起来,简化了模板,为你提供了各种各样的类。

除了隐藏了实现细节之外,它督促我们使用类(面向对象的思维)来编写应用程序,并且,这些应用程序是时间驱动的(即,只有在系统中的事件发生的时候,程序才会工作)。

事件,包括消息的发送和接收。在原始的服务器循环中,我们阻塞等待请求,当接收到请求时就对其提供服务,然后继续等待。而使用面向对象的socketserver后,服务器的循环,并非在服务器中创建代码,而是定义一个处理程序,当服务器接收到一个传入的请求时,服务器就可以调用你的函数。

下表是socketserver模块的类:

描述

BaseServer

包含核心服务器功能和mix-in类的钩子;仅用于推导,这样不会创建这个类的实例;可以使用TCPServer或UDPServer创建类的实例

TCPServer/UDPServer

基础的网络同步TCP/UDP服务器

UnixStreamServer/UnixDatagramServer

基于文件的基础同步TCP/UDP服务器

ForkingMixin/ThreadindMixin

核心派出或线程功能;只用作mix-in类于一个服务器类配合实现一些异步性;不能直接实例化这个类

ForkingTCPServer/ForkingUDPServer

ForkingMixin和TCPServer/UDPServer的组合

ThreadingTCPServer/ThreadingUDPServer

ThreadingMixin和TCPServer/UDPServer的组合

BaseRequesthandler

包含处理服务请求的核心功能;仅仅用于推导,无法创建这个类的实例;

StreamRequestHandler/DatagramRequestHandler

实现TCP/UDP服务器的服务处理器

创建socketserver TCP服务器

下面的tsTservSS.py脚本中,首先导入服务器类,然后定义与之相同的主机常量。其次是请求处理程序类,最后启动它:

#导入必须的类

from socketserver import(TCPServer as TCP ,StreamRequestHandler as SRH)from time importctime

HOST= ''PORT= 21567ADDR=(HOST,PORT)class MyRequestHandler(SRH): #这是一个继承自socketserver模块中的StreamRequestHandler的一个子类

def handle(self): #重写handle()方法。当接收来自客户端的消息时,就会调用这个方法

print('连接来自于:',self.client_address)'''StreamRequestHandler类将输入输出套接字看做是类似文件的对象,因此可以使用readline()来获取客户端的消息

同时利用write()将字符串发送回客户端'''self.wfile.write(('[%s] %s' % (ctime(),self.rfile.readline())).encode('utf-8')) #必须要编码

tcpServ= TCP(ADDR,MyRequestHandler) #利用给定的主机信息和请求处理类创建了TCP服务器

print('等待连接……')

tcpServ.serve_forever()#服务器无限循环

创建socketserver TCP客户端

from socket import *HOST= 'localhost'PORT= 21567BUFSIZ= 1024ADDR=(HOST,PORT)whileTrue:#socketserver请求处理程序的默认行为是接受连接、获取请求、关闭连接。

#所以,不能在应用程序整个执行过程中都保持连接——即,每次发送消息,都要创建新的套接字,并在最后关闭

#不过,可以通过重写请求处理类中的适当的方法可以改变他。

tcpCliSock =socket(AF_INET,SOCK_STREAM)

tcpCliSock.connect(ADDR)

data= input('请输入:')if notdata :breaktcpCliSock.send(('%s\r\n' % data).encode('utf-8')) #这里使用的处理程序类对待套接字通信就像文件一样,所以使用行终止符(回车和换行符)

data =tcpCliSock.recv(BUFSIZ)if notdata:break

print(data.strip())

tcpCliSock.close()

相关文章:

template.process(root, out)的用法(shiro项目中来的九)

假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情请…

java中最常用jar包的用途说明,适合初学者

jar包用途axis.jarSOAP引擎包commons-discovery-0.2.jar用来发现、查找和实现可插入式接口,提供一些一般类实例化、单件的生命周期管理的常用方法.jaxrpc.jarAxis运行所需要的组件包saaj.jar创建到端点的点到点连接的方法、创建并处理SOAP消息和附件的方法&#xff…

【青少年编程(第33周)】Scratch(三级)公益活动开营了!

2021年10月10日(周日)晚20:00我们在青少年编程竞赛交流群开展了第三十三期直播活动。我们直播活动的主要内容如下: 首先,我们奖励了上周测试超过40分的小朋友。 其次,我们讲解了上次测试中小朋友们做错的题目Scratch青…

python函数图像绘制、函数不固定_无法在函数中绘制tkinter图像

我正在制作一个垄断游戏,我试图在画布上绘制图像,但它只有在功能不起作用的情况下才会起作用:def make_image(root, location, canvas):photo PhotoImage(file root)canvas.create_image(location["X"],location["Y"],…

一些与算法有关的网站

//转自:http://www.cnblogs.com/a180285/archive/2012/01/15/2290290.html //------------------------------------------------------------------------------------------------------------------------------------------------------------ 我在网上到处找了…

【工程基础】校招研发工程师笔试题

请留言,说出你的解题思路和答案。稍后,我会把参考答案发到留言区。不定期整理相关的问题答案分享。 1、以下代码违反了什么设计原则() public class Student {public int Id;public string StudentName; }public class MClass {…

情人节学写html5微信游戏

情人节都在干什么??? 当然是写代码!!! 看某书正好以一个html5微信游戏,很适合今天的日子 附上demo:demo 请在手机上查看,pc端请切换手机调试模式,目前没弄完后…

python和idl_有前辈对比过IDL和Python的速度吗,哪个会快点?

看到这个问题,发现国外还真有人做过对比,主要在于语言特点方面,并没有详细的定量对比,贴过来大家一起乐呵乐呵。其实大体上就是之前几位答主所说的那样,主要区别在于:1.资料的多少。python资料较多2.现成的…

测试用例经验谈

1.需要测试的那个类是new出来的实例; 2.被测试的类实例的对象所需要调用的接口或者对象都是mock出来的(无论是否已经有实现)。 3.所有的接口都是根据被测试的类的需要产生的,即接口属于客户(被测试的类)。 …

中国电子学会图形化四级编程题:加减法混合运算器

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100,小马老…

Bzoj4566:[HAOI2016]找相同字符

题面 Bzoj Sol 两个串拼在一起后求出后缀数组 然后显然的\(n^2\)暴力&#xff0c;就是直接枚举求\(LCP\) 又由于扫的时候是对\(height\)取\(min\) 那么可以用单调栈维护每一段的贡献相同的 # include <bits/stdc.h> # define RG register # define IL inline # define Fi…

python字符照片_python图片转字符图片

python图片转字符图片代码话不多说&#xff0c;直接上代码。***************************#-*- coding:utf-8 -*-from PIL import ImageIMG#文件路径WIDTH60HEIGHT45ascii_char list("$B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_~<>i!lI;:,\"^…

三大基本排序专题

//以下依次是冒泡、选择、插入排序 var n,i:longint;a:array[0..20] of longint;procedure BUB;var i,j,t:longint;beginfor i:1 to n-1 dofor j:1 to n-i doif a[j]>a[j1] then begin t:a[j]; a[j]:a[j1]; a[j1]:t; end;end;procedure SEL;var i,j,k,t:longint;beginfor i:…

Linux内核中锁机制之完成量、互斥量

在上一篇博文中笔者分析了关于信号量、读写信号量的使用及源码实现&#xff0c;接下来本篇博文将讨论有关完成量和互斥量的使用和一些经典问题。 八、完成量 下面讨论完成量的内容&#xff0c;首先需明确完成量表示为一个执行单元需要等待另一个执行单元完成某事后方可执行&…

中国电子学会图形化四级编程题:绳子算法

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

域名登陆出现400_域名解析错误怎么办?

可能有些人在进行域名解析时会遇到解析错误的问题&#xff0c;遇到这样的问题该怎么办呢&#xff1f;今天小编给大家整理了一些思路&#xff0c;希望能够提供一些帮助给大家。网站域名设置目前域名解析服务很多都是由域名供应商来设置&#xff0c;也有用户在网站运营期间需要更…

第02章 PyTorch基础知识

文章目录第02章 Pytorch基础知识2.1 张量2.2 自动求导2.3 并行计算简介2.3.1 为什么要做并行计算2.3.2 CUDA是个啥2.3.3 做并行的方法补充&#xff1a;通过股票数据感受张量概念。本图文是Datawhale组队学习Pytorch的学习笔记&#xff0c;主要内容包括张量的概念&#xff08;0维…

一个简单的缓冲区溢出的思考

从大二开始真正接触技术开始&#xff0c;从最早的HTML&#xff0c;PHP&#xff0c;WEB开发。一直以为以后可能会从事开发的工作&#xff0c;碰巧大三上的时候和同专业的郭子&#xff0c;邹豪参加了南京的一个信息安全技能大赛&#xff0c;才真正找到了兴趣的方向&#xff0c;也…

Spring-boot+Vue = Fame 写blog的一次小结

前言 作为一个程序员&#xff0c;总是要有一个属于自己的博客。然后作为一个造轮子的程序员&#xff0c;肯定不满足于直接使用现有的博客系统&#xff0c;于是我便自己写了一个带后台管理的博客系统。 体验地址&#xff1a; zzzzbw.cn 技术选型 作为一个Javaer&#xff0c;服务…

gitee查看当前账号_upic+gitee图床,自由书写Markdown

使用的软件Typora&#xff1a;Markdown文档编辑器(https://www.typora.io/)upic&#xff1a;图床工具(https://github.com/gee1k/uPic)创建自己的GitHub图床1 创建账号https://gitee.com/,自行创建账号就可以了和github很相似&#xff0c;但是速度更快2创建仓库内容按照自己的习…

CentOS中vsftp安装与配置

1. 安装 使用chkconfig --list来查看是否装有vsftpd服务&#xff1b; 使用yum命令直接安装&#xff1a;yum -y install vsftpd 然后为它创建日志文件&#xff1a;touch /var/log/vsftpd.log 这样简单的两个命令就完成了vsftp的安装&#xff0c;但是如果你现在想这样ftp://your_…

纸上原型设计 VS 桌面原型工具设计,你更喜欢谁?

2019独角兽企业重金招聘Python工程师标准>>> 纸上原型设计&#xff0c;作为传统的原型设计方式&#xff0c;简单快速&#xff0c;成本低廉&#xff0c;为大部分设计师所喜爱。而桌面原型工具设计&#xff0c;作为伴随电脑科技发展而出现的原型设计方式&#xff0c;快…

韩宇:CV学习路线

CV学习路线 对于刚入门CV的同学来说&#xff0c;通过看视频学习效率会比看书高&#xff0c;如下是我亲身实践较为高效的CV学习路线。 1. 计算机视觉概述 计算机视觉本身又包括了诸多不同的研究方向&#xff0c;比较基础和热门的几个方向主要包括&#xff1a; 物体识别和检测…

mysql获取删除的条数_如何从mysql表中删除数百万条记录而不会减速

有没有一种很好的方法来删除很多记录而不会减慢网站的速度&#xff1f;我需要从没有索引和主键的MySQL表中删除数百万条记录。我阅读了SO和网上的各种教程&#xff0c;基本策略是限制删除查询&#xff0c;在删除之间休眠一两秒钟&#xff0c;然后重复此过程直至完成。我也(使用…

某大型银行深化系统之二十:异常规范

传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 1异常抛出与捕捉规则 1.1任何抛出异常的方法必须先声明异常 {// Constructorpublic MyClass( String name ) throws NullPointerException, llegalArgumentException {...} } 1.2异常声明后&#xf…

女朋友的Mysql练习题

2019独角兽企业重金招聘Python工程师标准>>> 一、设有一数据库&#xff0c;包括四个表&#xff1a;学生表&#xff08;Student&#xff09;、课程表&#xff08;Course&#xff09;、成绩表&#xff08;Score&#xff09;以及教师信息表&#xff08;Teacher&#xf…

中国电子学会图形化四级编程题:解密

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

python函数模块概念_python中模块和包的概念

1.模块一个.py文件就是一个模块。这个文件的名字是&#xff1a;模块名.py。由此可见在python中&#xff0c;文件名和模块名的差别只是有没有后缀。有后缀是文件名&#xff0c;没有后缀是模块名。每个文件(每个模块)都是一个独立的名称空间&#xff0c;也就是说可以在两个(多个)…

linux-glibc内存管理小结2(内存相关系统调用的实现)

在上一节ptmalloc源码分析中我们提到dlmalloc向系统申请内存的方式有两种, 对应Linux系统下分别是sbrk()与mmap()系统调用. 本节我们就来看下brk()/sbrk()与mmap()/munmap()的实现, 作为切入点来一窥内核内存管理的特点. 在正文开始之前我们先大致描述一下内核内存管理的模型. …

【组队学习】【30期】7. CV中的Transformer

CV中的Transformer 航路开辟者&#xff1a;安晟领航员&#xff1a;尚育鹏航海士&#xff1a;安晟、袁明坤、闫永强 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/dive-into-cv-pytorch [第六章]内容属性&#xff1a;打磨课程内容说明&#xff1a;17年在…