摘录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()

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

  1. python socket connect 阻塞_python 网络编程(socketserver,阻塞,其他方法)

    重点回顾: (重点)粘包 : 就是因为接收端不知道如何接收数据,造成接收数据的混乱的问题 只发生在tcp协议上. 因为tcp协议的特点是面向数据流形式的传输 粘包的发生主要是因为tcp协议有两个机制: ...

  2. python socket 主动断开_Python网络编程tcp详解(基础篇十四)

    网络编程tcp 1 TCP详解 <1> tcp概述 TCP:英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的.可靠的.基于字节流的 ...

  3. python tcp协议_python 网络编程 -- Tcp协议

    Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 客户端 ...

  4. python udp socket 缓冲区大小_Python网络编程(socket模块、缓冲区、http协议)

    网络的概念:主机   端口  IP  协议 服务器: localhost/127.0.0.1 客户端: 只是在本机启动客户端,用127.0.0.1访问 服务器: 0.0.0.0 客户端: 可以在本机用 ...

  5. unet网络python代码详解_python网络编程详解

    最近在看<UNIX网络编程 卷1>和<FREEBSD操作系统设计与实现>这两本书,我重点关注了TCP协议相关的内容,结合自己后台开发的经验,写下这篇文章,一方面是为了帮助有需要 ...

  6. python epoll多路复用技术_python网络编程——IO多路复用之epoll

    1.内核EPOLL模型讲解 此部分参考http://blog.csdn.net/mango_song/article/details/42643971博文并整理 首先我们来定义流的概念,一个流可以是文 ...

  7. python网络编程-socketserver模块

    使用socketserver 老规矩,先引入import socketserver 必须创建一个类,且继承socketserver.BaseRequestHandler 这个类中必须重写handle( ...

  8. python异步多线程框架_Python网络编程中的服务器架构(负载均衡、单线程、多线程和同步、异步等)。...

    这篇文章主要介绍服务器架构. 网络服务需要面对两个挑战.第一个问题是核心挑战,要编写出能够正确处理请求并构造合适响应的代码. 第二个挑战是如何将网络代码部署到随系统自动启动的Windows服务或者是U ...

  9. pythontcp服务器如何关闭阻塞_python 网络编程(socketserver,阻塞,其他方法)

    重点回顾: (重点)粘包 : 就是因为接收端不知道如何接收数据,造成接收数据的混乱的问题 只发生在tcp协议上. 因为tcp协议的特点是面向数据流形式的传输 粘包的发生主要是因为tcp协议有两个机制: ...

最新文章

  1. 神秘的中国超算:比肩高铁的世界级领先
  2. 35岁的程序员是“都挺好”还是“都挺惨”?\n
  3. 小米2s屏幕_米家空气净化器3VS小米空气净化器2 成熟设计的优势
  4. 皮一皮:工作再忙,也记得陪陪孩子...
  5. html 换行符_每个非网站开发人员都应该了解的21个HTML基础知识
  6. 《此生未完成》痛句摘抄(4)
  7. Linux中find用法
  8. 关于线程池ThreadPoolExecutor使用总结
  9. 西交大计算机考博学术英语,2018年西安交通大学考博英语真题
  10. Android - 应用程序的优先级和进程状态
  11. linux 创建LVM磁盘
  12. C/C++函数调用方式
  13. 区块链 -- Merkle Tree
  14. GUI练习——列出指定目录内容
  15. poj 3026 Borg Maze
  16. 学校计算机房的制度,小学计算机房管理制度
  17. 什么是非参数检验?应该如何操作与分析?
  18. Selenium简单的163邮箱登录实例
  19. 基于cesium实现城市查询并定位
  20. CVPR2020 Learning in the Frequency Domain学习笔记

热门文章

  1. java入门(p1)进入java的世界
  2. Parentheses Balance (括号平衡)---栈
  3. 数据挖掘公司D square nv 完成500万欧元B轮融资
  4. 启动webpack-dev-server只能本机访问的解决办法
  5. iOS 秒数转换成时间,时,分,秒
  6. 坑系列 --- 高可用架构的银弹
  7. 仿余额宝数字跳动效果 TextCounter
  8. linux源码包卸载方式
  9. 嵌入式开发之信号采集同步---VSYNC和HSYNC的作用以及它们两者之间的关系
  10. Visual Studio中的《C# 语言规范》