python多线程实现TCP服务端
时间:2019-09-03
本文章向大家介绍python多线程实现TCP服务端,主要包括python多线程实现TCP服务端使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文实例为大家分享了python多线程实现TCP服务端的具体代码,供大家参考,具体内容如下
需求
1.创建一个TCP服务器接收服务端发送的信息并给予答复
2.以多线程方式实现接收客户端信息
3.间客户端发送的信息解码输出
思路分析
1.创建一个TCP客户端套接字
2.写一个接收消息的方法,可以接收客户端消息并解码输出
3.客户端被动监听,每有一个客户端连接就创建一个子线程执行接收消息方法
代码实现
# 导入模块 import socket import threading # 接收消息 def recv(client_socket, ip_port): while True: client_text = client_socket.recv(1024) # 如果接收的消息长度不为0,则将其解码输出 if client_text: print("[客户端消息]", ip_port, ":", client_text.decode("gbk")) # 给客户端响应 client_socket.send("收到\n".encode()) # 当客户端断开连接时,会一直发送''空字符串,所以长度为0已下线 else: print("客户端", ip_port, "已下线") client_socket.close() break # 程序主入口 def main(): # 创建TCP套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置端口复用 tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 绑定端口 tcp_socket.bind(("", 8080)) # 设置为被动监听状态,128表示最大连接数 tcp_socket.listen(128) while True: # 等待客户端连接 client_socket, ip_port = tcp_socket.accept() print("[新客户端]:", ip_port, "已连接") # 有客户端连接后,创建一个线程将客户端套接字,IP端口传入recv函数, t1 = threading.Thread(target=recv, args=(client_socket, ip_port)) # 设置线程守护 t1.setDaemon(True) # 启动线程 t1.start() if __name__ == '__main__': main()
执行结果
接收客户端消息
响应客户端消息
客户端下线后识别
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- typedef 和define的区别
- QT5 动态链接库的创建和使用
- Struts2 动态结果和带参数的跳转
- struts2 Result Type四个常用转跳类型
- Struts2 默认Action和模块包含
- struts2 访问Web元素的4种方法
- struts2 DMI
- 翻译qmake文档(四) Building Common Project Types
- 翻译qmake文档(三) Creating Project Files
- 翻译qmake文档(二) Getting Started
- QTableView 添加按钮
- QTableView 添加进度条
- c# 调用win32模拟点击的两种方法
- [原创翻译]Protocol Buffer Basics: C#
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法