IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 用socket和threading模块写多线程TCP服务端 -> 正文阅读

[网络协议]用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

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-12 19:57:15  更:2021-11-12 19:57:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/3 9:17:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码