python多线程实现TCP服务端


Posted in Python onSeptember 03, 2019

本文实例为大家分享了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()

执行结果

接收客户端消息

python多线程实现TCP服务端 

响应客户端消息

python多线程实现TCP服务端 

客户端下线后识别

python多线程实现TCP服务端

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python功能键的读取方法
May 28 Python
关于Python 3中print函数的换行详解
Aug 08 Python
使用Python的turtle模块画图的方法
Nov 15 Python
python flask中静态文件的管理方法
Mar 20 Python
对Python中数组的几种使用方法总结
Jun 28 Python
利用python脚本如何简化jar操作命令
Feb 24 Python
python接口调用已训练好的caffe模型测试分类方法
Aug 26 Python
利用Python产生加密表和解密表的实现方法
Oct 15 Python
kafka-python 获取topic lag值方式
Dec 23 Python
python matplotlib实现将图例放在图外
Apr 17 Python
Django3中的自定义用户模型实例详解
Aug 23 Python
Python一行代码实现自动发邮件功能
May 30 Python
Python实现多线程/多进程的TCP服务器
Sep 03 #Python
python+selenium 点击单选框-radio的实现方法
Sep 03 #Python
使用OpCode绕过Python沙箱的方法详解
Sep 03 #Python
python实现单链表的方法示例
Sep 03 #Python
python中enumerate() 与zip()函数的使用比较实例分析
Sep 03 #Python
python网络编程之多线程同时接受和发送
Sep 03 #Python
springboot配置文件抽离 git管理统 配置中心详解
Sep 02 #Python
You might like
php与Mysql的一些简单的操作
2015/02/26 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
一段非常简单的让图片自动切换js代码
2006/11/10 Javascript
jQuery 性能优化指南(2)
2009/05/21 Javascript
jQuery设置和获取HTML、文本和值示例
2014/07/08 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
浅析如何利用JavaScript进行语音识别
2016/10/27 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
2018/01/10 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
小程序自定义模板实现吸顶功能
2020/01/08 Javascript
[01:16:37]【全国守擂赛】第三周决赛 Dark Knight vs. 一个弱队
2020/05/04 DOTA
Python3基础之基本数据类型概述
2014/08/13 Python
Python 创建子进程模块subprocess详解
2015/04/08 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
win10下tensorflow和matplotlib安装教程
2018/09/19 Python
python之mock模块基本使用方法详解
2019/06/27 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
计算机个人求职信范例
2014/01/24 职场文书
公证委托书模板
2014/04/03 职场文书
股份转让协议书范本
2015/01/27 职场文书
邀请函怎么写
2015/01/30 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript
SpringCloud超详细讲解Feign声明式服务调用
2022/06/21 Java/Android