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()
python socket tcp客户端_python网络编程socketserver模块(实现TCP客户端/服务器)相关推荐
- python socket connect 阻塞_python 网络编程(socketserver,阻塞,其他方法)
重点回顾: (重点)粘包 : 就是因为接收端不知道如何接收数据,造成接收数据的混乱的问题 只发生在tcp协议上. 因为tcp协议的特点是面向数据流形式的传输 粘包的发生主要是因为tcp协议有两个机制: ...
- python socket 主动断开_Python网络编程tcp详解(基础篇十四)
网络编程tcp 1 TCP详解 <1> tcp概述 TCP:英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的.可靠的.基于字节流的 ...
- python tcp协议_python 网络编程 -- Tcp协议
Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 客户端 ...
- python udp socket 缓冲区大小_Python网络编程(socket模块、缓冲区、http协议)
网络的概念:主机 端口 IP 协议 服务器: localhost/127.0.0.1 客户端: 只是在本机启动客户端,用127.0.0.1访问 服务器: 0.0.0.0 客户端: 可以在本机用 ...
- unet网络python代码详解_python网络编程详解
最近在看<UNIX网络编程 卷1>和<FREEBSD操作系统设计与实现>这两本书,我重点关注了TCP协议相关的内容,结合自己后台开发的经验,写下这篇文章,一方面是为了帮助有需要 ...
- python epoll多路复用技术_python网络编程——IO多路复用之epoll
1.内核EPOLL模型讲解 此部分参考http://blog.csdn.net/mango_song/article/details/42643971博文并整理 首先我们来定义流的概念,一个流可以是文 ...
- python网络编程-socketserver模块
使用socketserver 老规矩,先引入import socketserver 必须创建一个类,且继承socketserver.BaseRequestHandler 这个类中必须重写handle( ...
- python异步多线程框架_Python网络编程中的服务器架构(负载均衡、单线程、多线程和同步、异步等)。...
这篇文章主要介绍服务器架构. 网络服务需要面对两个挑战.第一个问题是核心挑战,要编写出能够正确处理请求并构造合适响应的代码. 第二个挑战是如何将网络代码部署到随系统自动启动的Windows服务或者是U ...
- pythontcp服务器如何关闭阻塞_python 网络编程(socketserver,阻塞,其他方法)
重点回顾: (重点)粘包 : 就是因为接收端不知道如何接收数据,造成接收数据的混乱的问题 只发生在tcp协议上. 因为tcp协议的特点是面向数据流形式的传输 粘包的发生主要是因为tcp协议有两个机制: ...
最新文章
- 神秘的中国超算:比肩高铁的世界级领先
- 35岁的程序员是“都挺好”还是“都挺惨”?\n
- 小米2s屏幕_米家空气净化器3VS小米空气净化器2 成熟设计的优势
- 皮一皮:工作再忙,也记得陪陪孩子...
- html 换行符_每个非网站开发人员都应该了解的21个HTML基础知识
- 《此生未完成》痛句摘抄(4)
- Linux中find用法
- 关于线程池ThreadPoolExecutor使用总结
- 西交大计算机考博学术英语,2018年西安交通大学考博英语真题
- Android - 应用程序的优先级和进程状态
- linux 创建LVM磁盘
- C/C++函数调用方式
- 区块链 -- Merkle Tree
- GUI练习——列出指定目录内容
- poj 3026 Borg Maze
- 学校计算机房的制度,小学计算机房管理制度
- 什么是非参数检验?应该如何操作与分析?
- Selenium简单的163邮箱登录实例
- 基于cesium实现城市查询并定位
- CVPR2020 Learning in the Frequency Domain学习笔记