趣文网 > 作文大全

Python入门基础之socket多线程编程 TCP服务器和客户端通信

2020-11-30 00:05:01
相关推荐

在上一篇文章中,我介绍了一下python3 socket编程的基础,包括TCP、UDP客户端和服务器的建立过程(链接在最下方)。不过那个只是单线程的,服务器一次只能和一个客户端会话,多个客户端的话只能等待。我们平时的应用中,服务器肯定是要并发的,所以,今天将介绍socket编程的多线程编程。一个服务器同时和多个客户端建立会话。

多线程原理:TCP服务器会创建一个线程池,每当有客户端请求连接的时候,它便会从线程池中分配一个线程同客户端建立连接,当客户端中断连接后,线程便销毁。

SocketServer 模块

在python中,socket多线程并发的实现主要是利用SocketServer模块实现的。客户端比较简单,一般只用socket就可以,服务器端复杂些,用socketserver或者Twisted 框架等,本篇主要讲SocketServer。 SocketServer 是标准库中一个高级别的模块。用于简化网络客户与服务器的实现。

socketserver模块中分两大类:server类(解决连接问题)和request类(解决通信问题)

server类:

Request类:

类的描述如下:

SocketServerTCP服务器:

这里我们用到了类,因为多线程就可以利用面向对象了,每一次连接,不过是实现了一个实例。类我前面也讲过了有兴趣可以看一下。

在代码中,先导入我们的服务器类,然后像之前一样定义主机常量。主机常量后就是我们的请求处理器类,然后是启动代码。

服务器和客户端建立连接的步骤我就不写了,上一篇文章中有。

不废话了,上代码:

服务器端:

代码解释:

我们从 SocketServer 的 StreamRequestHandler 类中派生出一个子类,并重写 handle()函数。

在有客户消息进来的时候,handle()函数就会被调用。StreamRequestHandler 类支持像操作文件对象那样操作输入输出套接字。用request.recv()函数接收消息。因为socketserver是封装好的模块,我们不需要对其初始化连接。其中self.request self.client_address等于socket中 conn,addr = socket.accept(),只不过在socketserver模块中已经替我们包装好了,还替我们包装了包括bind()、listen()、accept()方法(不懂得看我前面文章,连接在下面)。

代码中间部分就是接收客户端消息,并返回给客户端。

代码的最后部分用给定的主机信息和请求处理类创建 TCP 服务器。然后进入等待客户请求与处理客户请求的无限循环中。

客户端:

客户端非常简单,就是简单socket编程。代码和上一篇中的都一样,就是多了一个异常处理。步骤就是昨天我发的文章里面的

上一篇文章:Python入门基础之网络编程、socket编程、TCP、UDP编程

面向对象:干货!Python入门基础之面向对象二:类和实例、方法

码字不易,多多关注。

阅读剩余内容
网友评论
相关内容
延伸阅读
小编推荐

大家都在看

我的梦想作文600字老师 写作文听什么歌写得快 与书为伴作文500字 成考作文大全600字 我的烦恼800字初一作文 让我牵着你的手作文 我懂得了感恩作文600字 感谢生命中的美意作文 守望花开作文600字 小黄车作文600字 首尾呼应的作文开头和结尾 我想对妈妈说作文300字 我最尊敬的人作文600字 我读懂了什么作文600字 番茄炒鸡蛋作文300字 街头见闻作文500字 我生病了妈妈照顾我的作文 寒假的趣事作文400字 生命的色彩作文800字 除夕之夜作文500字 陪伴是最长情的告白 作文 菊花优秀作文300字 以遇见为题的作文600字 我真想什么作文400字 当我面对挫折的时候作文 myfamily英语作文5句 开学第一课作文200字 互联网的利与弊英语作文 关于友情的作文500字 有朋友真好作文500字