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

用socket和threading模块写多线程TCP服务端,第1张

用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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5437218.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存