python中的socket模块,python实现socket编程
SocketServer模块的技术博客《Python核心编程(第3版)》 33542.5 _ wx 62830 F4 b679a 4 _ 51c to博客
本文内容指文章地址:
https://m.aliyun.com/yunqi/articles/93088/
Socketserver模块SocketServer是标准库中的高级模块(在Python 3.x中改名为SocketServer)。它的目标是简化许多样板代码,这些代码是创建网络客户机和服务器的必要代码。本模块中为您创建了各种类,如表2-3所示。
除了为你隐藏实现细节,另一个区别是我们现在使用类来编写应用程序。因为以面向对象的方式处理事务有助于组织数据,并在逻辑上将功能放在正确的位置。您还会注意到,应用程序现在是事件驱动的,这意味着它们只有在系统中发生事件时才能工作。
包括事件的发送和接收。事实上,您将看到该类定义只包含一个用于接收客户端消息的事件处理程序。所有其他函数都来自所使用的SocketServer类。此外,GUI编程(见第5章)也是事件驱动的。您会立即注意到它们的相似之处,因为最后一行代码通常是服务器的无限循环,它等待并响应来自客户端的服务请求。它的工作方式几乎类似于本章前面基本TCP服务器中的无限while循环。
在最初的服务器周期中,我们阻塞等待的请求,当我们收到请求时向它们提供服务,然后继续等待。在这里的服务器循环中,不是在服务器中创建代码,而是定义一个处理程序,这样当服务器接收到一个传入的请求时,服务器就可以调用您的函数。
要创建SocketServer TCP服务器,首先要导入Server类,然后像前面一样定义相同的host常量。接下来是请求处理程序类,最后启动它。有关更多详细信息,请参见下面的代码片段。
这个脚本使用SocketServer类、TCPServer和StreamRequestHandler创建一个时间戳TCP服务器。#!/usr/bin/env python
从SocketServer导入(TCPServer作为TCP,StreamRequestHandler作为SRH)
从时间导入ctime
主机=
端口=21567
ADDR=(主机,端口)
类别MyRequestHandler(SRH):
定义句柄(自身):
打印.连接自:,self.client_address
self . wfile . write([% s]% s %(ctime(),self.rfile.readline()))
tcpServ=TCP(ADDR,MyRequestHandler)
提前开始打印!正在等待连接.
tcpServ.serve_forever()
这里没有写客户端,用浏览器访问本机的21567端口。
解释:
从SocketServer导入的第一部分(TCP Server作为TCP,Streamrequest Handler作为SRH)包括从Socket Server导入正确的类。注意,这里使用的是Python 2.4中引入的多行导入函数。如果您使用的是早期版本的Python,则必须使用完全限定的module.attribute名称,或者在同一行中导入两个属性。
类别MyRequestHandler(SRH):
定义句柄(自身):
打印.连接自:,self.client_address
self . wfile . write([% s]% s %(ctime(),self.rfile.readline()))这里做了很多工作。我们获取请求处理程序MyRequestHandler作为SocketServer中StreamRequestHandler的子类,并重写其handle()方法,该方法在基类Request中默认没有行为。
定义句柄(自身):
当pass从客户端接收到消息时,它调用handle()方法。StreamRequestHandler类将输入和输出套接字视为类似文件的对象,因此我们将使用readline()获取客户端消息,并使用write()将字符串发送回客户端。
因此,在客户端和服务器端代码中,需要额外的回车和换行符。实际上,你不会在代码中看到它,因为我们只是从客户端重用那些符号。除了这些细微的差异,它看起来就像以前的服务器。
tcpServ=TCP(ADDR,MyRequestHandler)
提前开始打印!正在等待连接.
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。