栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

用socket和threading模块写多线程TCP服务端

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用socket和threading模块写多线程TCP服务端

系列文章目录

Python Socket 编程详细介绍


前言 之前学习了只用python中的socket模块编程TCP客户端和服务端,本章加入threading模块对服务端进行多线程处理。
一、threading模块

threading 模块中最核心的内容是 Thread 这个类。

创建Thread对象,然后运行起来,每个Thread对象代表一个线程,每个线程可以处理不同的任务,这就是多线程编程。值得注意的是,程序运行时默认就是在主线程上。

创建Thread对象有两种方法:

1.直接创建Thread,然后将一个callable 对象从类的构造器中传递回去,这个callable就是回调函数,用来处理任务。
2.编写一个自定义类继承 Thread,然后复写 run() 方法,在 run() 方法中编写任务处理代码,然后创建这个 Thread 的子类。

下面用种方法直接创建 Thread 对象。

class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

Thread构造的方法中target所以我们需要将一个callable对象赋值给它,args这是固定参数,kwargs是可变参数。

二、threading代码示例 1.引入库
import threading

在主程序打印5次,在子程序打印5次
代码如下(示例):

#在主程序打印5次,在子程序打印5次

import threading
import time

def call():

    for i in range(5):
        print('hu ',i)
        time.sleep(1)


thread = threading.Thread(target=call)
thread.start()

for i in range(5):
    print('main ', i)
    time.sleep(1)

运行结果如下:

hu 0
tu 0
hu 1
tu 1
hu 2
tu 2
hu 3
tu 3
hu 4
tu 4

每一个 Thread 都有name 的属性,代表的就是线程的名字,这个可以在构造方法中赋值。
如果在构造方法中没有个 name 赋值的话,默认就是 “Thread-N” 的形式,N 是数字。

三、 TCP服务端
import socket   #Socket 它提供了标准的BSD Socket API
import threading  #threading  多线程

bind_ip = "0.0.0.0"
bind_port = 555

#创建socket对象
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#绑定套接字地址
server.bind((bind_ip,bind_port))

server.listen(5)  #最大连接5

print("[*] Listening on {0}:{1}".format(bind_ip,bind_port))

#客户处理线程
def handle_client(client_socket):

    request = client_socket.recv(4096).decode()#打印出客户端发送得到内容
    print("[*] Received :",request)

    client_socket.send("ACK!".encode())
    client_socket.close()

while True:
    client,adder = server.accept()

    print("[*] Accepted connection from {0}:{1}".format(adder[0],adder[1]))


    #挂起客户端线程,处理传入的数据
    client_handler = threading.Thread(target=handle_client,args=(client,))
    client_handler.start()

总结

这篇文章主要学习对TCP服务端的编写,简单介绍了threading模块。想要深入学习theading模块可以去
https://blog.csdn.net/briblue/article/details/85101144

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/461716.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号