python小白-day8 socketserver模块

SocketServer模块

SocketServer内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理多个客户端请求的Socket服务端。即:每个客户端请求连接到服务器时,Socket服务端都会在服务器是创建一个“线程”或者“进程” 专门负责处理当前客户端的所有请求。

ThreadingTCPServer

ThreadingTCPServer实现的Soket服务器内部会为每个client创建一个 “线程”,该线程用来和客户端进行交互。

1、ThreadingTCPServer基础

使用ThreadingTCPServer:

  • 创建一个继承自 SocketServer.BaseRequestHandler 的类
  • 类中必须定义一个名称为 handle 的方法
  • 启动ThreadingTCPServer

?多并发实例:

服务端:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

#!/usr/bin/env python

import socketserver

class MyTCPHandler(socketserver.BaseRequestHandler):

    def handle(self):  #handle函数必须重新定义

        while True:

            print(‘new conn:‘,self.client_address)

            data = self.request.recv(1024)

            if not data:break

            print(‘client says:‘,data.decode())

            self.request.send(data)

if __name__ == ‘__main__‘:

    host,port = ‘localhost‘,50007

    server = socketserver.ThreadingTCPServer((host,port),MyTCPHandler)

    server.serve_forever()

客户端:


1

2

3

4

5

6

7

8

9

10

11

12

13

#!/usr/bin/env python

import socket

ip_port = (‘127.0.0.1‘,50007)

sk = socket.socket()

sk.connect(ip_port)

while True:

    user_input = input(‘>>:‘)

    sk.send(bytes(user_input,‘utf8‘))

    server_reply = sk.recv(1024)

    print(‘server reply:‘,str(server_reply,‘utf8‘))

sk.close()

来自为知笔记(Wiz)

时间: 2024-08-26 18:43:30

python小白-day8 socketserver模块的相关文章

python小白-day8 线程、进程、协程

Python线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 1 2 3 4 5 6 7 8 9 10 11 12 13 #!/usr/bin/env python import threading import time def show(arg):     time.sleep(1)     print('thread'+str(arg)) for i

python小白-day5 sys模块

sys模块 1 2 3 4 5 6 7 8 sys.argv           命令行参数List,第一个元素是程序本身路径 sys.exit(n)        退出程序,正常退出时exit(0) sys.version        获取Python解释程序的版本信息 sys.maxint         最大的Int值 sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform       返回操作系统平台名称 sys

python小白-day5 os模块

os模块 提供对操作系统进行调用的接口 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import os print('getcwd()',os.getcwd()) #获取当前工作目录,即当前python脚本工作的目录路径 #os.chdir("dirname")  #改变当前脚本工作目录:相当于shell下cd print('curdir',os.curdir) 

python小白-day5 random模块

random模块 一.生成随机数 1 2 3 4 import random print(random.random()) print(random.randint(1,2)) print(random.randrange(1,10)) 二.生成随机验证码 1 2 3 4 5 6 7 8 9 10 import random cc = '' for i in range(6):     current = random.randint(0,4)     if current != i:     

Python实战之SocketServer模块

文章出处:http://www.cnblogs.com/wupeiqi/articles/5040823.html SocketServer内部使用 IO多路复用 以及 "多线程" 和 "多进程" ,从而实现并发处理多个客户端请求的Socket服务端.即:每个客户端请求连接到服务器时,Socket服务端都会在服务器是创建一个"线程"或者"进程" 专门负责处理当前客户端的所有请求. ThreadingTCPServer Thre

Python之路 - Socketserver实现多并发

Python之路 - Socketserver实现多并发 阅读指引 ?? socketserver ?? 实现多并发 ?? 阅读指引 ?? 在上面的整理篇章中 , 简单的网络编程基本已经会了 , 一个TCP , 一个UDP , 然后就是粘包问题 但是在上述中有一个问题 , 在现实生活中 , 一个服务端肯定常常需要同时服务好几个客户端 , 而上述篇章中并没有实现一对多同时进行的情况 , TCP中只能等前一个链接断开后续的才能连上 , 没连上就一直等 ; UDP则是接一次发一次 , 并不能同时接两次

python小白-day6 time&datetime模块

time&datetime ?一.time模块 time模块提供各种操作时间的函数 说明:一般有两种表示时间的方式:       第一种是时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一的       第二种以数组的形式表示即(struct_time),共有九个元素,分别表示,同一个时间戳的struct_time会因为时区不同而不同 1 2 3 4 5 6 7 8 9 10 11 12 import time print('clock():',time.cl

python 小白(无编程基础,无计算机基础)的开发之路 辅助知识2 模块

一.模块和命名空间 一般来说,Python程序往往由多个模块文件构成,通过import语句连接在一起.每个模块文件是一个独立完备的变量包,即一个命名空间.一个模块文件不能看到其他文件定义的变量名,除非它显示地导入了那个文件,所以模块文件在代码文件中起到了最小化命名冲突的作用.因为每个文件都是一个独立完备的命名空间,即使在他们拼写相同的情况下,一个文件的变量名是不会与另一个文件中的变量冲突的. 注意:import VS from:应该指出,from语句在某种意义上战胜了模块的名称空间分割的目的,因

Python全栈开发--socketserver模块和验证客户端链接的合法性

验证客户端链接的合法性 分布式系统中实现一个简单的客户端链接认证功能 #_*_coding:utf-8_*_ from socket import * import hmac,os secret_key=b'linhaifeng bang bang bang' def conn_auth(conn): ''' 认证客户端链接 :param conn: :return: ''' print('开始验证新链接的合法性') msg=os.urandom(32) conn.sendall(msg) h=