Python中通过socketserver库创建服务端

socketserver库是Python的标准库,提供了套接字服务端的框架,通过该框架可以简化服务端的创建流程。

1 socketserver库的导入

通过如图1显示的代码导入socketserver库。

图1 导入socketserver库

2 通过socketserver库创建TCP服务端

通过socketserver库创建TCP服务端分为如下步骤:首先定义socketserver库中BaseRequestHandler类的派生类;之后重写该派生类的handle()方法;最后实例化socketserver库中的TCPServer类,并通过该实例启动服务端。

2.1 定义socketserver库中BaseRequestHandler类的派生类

要创建一个服务端,必须定义socketserver库中的TCPServer类的实例,而定义该实例时需要指定请求处理(request handler)对象,该对象的定义了服务端如何处理客户端请求。BaseRequestHandler类是所有请求处理(request handler)对象类的父类。因此,需要首先定义socketserver库中BaseRequestHandler类的派生类,代码如图2所示。

图2 定义socketserver库中BaseRequestHandler类的派生类

其中,MyTCPHandler是自定义类,该类是socketserver库中BaseRequestHandler类的派生类。在MyTCPHandler中,重写了handle()方法,该方法的作用是定义了如何处理客户端的请求。第5行中定义了MyTCPHandler的data属性,self.request是父类的属性,表示与客户端通信的套接字,recv()表示接收来自客户端的数据,并保存到data属性中;第6行中的self.client_address是父类的属性,表示连入服务端的客户端列表;第7行打印出客户端发送的数据;第8行通过self.request即套接字,调用sendall()方法将收到的数据变为大写之后,发送给客户端。

2.2 启动服务端

通过socketserver库中的TCPServer类启动服务端,代码如图3所示。

图3 启动服务端

其中,第11行代码指定了服务端的IP地址和监听的端口号;第12行代码通过with...as语句定义了socketserver.TCPServer类的实例,server,并且将服务端的IP地址、监听的端口号以及自定义的请求处理类MyTCPHandler传递给该实例;第13行代码通过server调用serve_forever()方法启动服务端。

相关链接1 with...as语句请参考

Python中的with as语句_棉猴的博客-CSDN博客

3 运行效果

首先运行服务端,之后在windows10系统和windows7系统中分别运行Python网络编程改良版客户端-CSDN博客

中提到的客户端,此时服务端的运行效果如图4所示。

图4 服务端运行效果

此时,客户端运行效果如图5所示。

图5 服务端运行效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Flask视图程序同时运行SocketServer模块的服务端程序,需要使用Python的多线程或多进程技术,以便能够同时运行多个程序。 下面是一个使用多线程的Python程序示例,其包含Flask视图程序和SocketServer服务端程序: ```python from flask import Flask, render_template import threading import SocketServer app = Flask(__name__) # SocketServer服务端程序 class MyTCPHandler(SocketServer.BaseRequestHandler): def handle(self): self.data = self.request.recv(1024).strip() print "{} wrote:".format(self.client_address[0]) print self.data self.request.sendall(self.data.upper()) def socket_server(): HOST, PORT = "localhost", 9999 server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) server.serve_forever() # Flask视图程序 @app.route('/') def index(): return render_template('index.html') if __name__ == '__main__': # 多线程同时运行socket_server()和Flask程序 t1 = threading.Thread(target=socket_server) t1.start() app.run(debug=True) ``` 在上面的程序,我们首先定义了一个SocketServer服务端程序,其MyTCPHandler类用于处理客户端请求,socket_server()函数用于启动服务端程序。 然后定义了一个Flask视图程序,其@app.route('/')装饰器定义了一个路由,用于返回index.html页面。 最后,在程序的主函数,我们使用多线程启动socket_server()和Flask程序,以便能够同时运行它们。需要注意的是,在Flask程序,我们需要将debug参数设置为True,以便在调试模式下运行程序。 希望这个示例能够帮助你理解如何在Flask视图程序同时运行SocketServer模块的服务端程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值