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的几条建议分享
Feb 10 Python
详细解读Python中解析XML数据的方法
Oct 15 Python
基于python中staticmethod和classmethod的区别(详解)
Oct 24 Python
浅谈用Python实现一个大数据搜索引擎
Nov 28 Python
对python的unittest架构公共参数token提取方法详解
Dec 17 Python
python实现超市管理系统(后台管理)
Oct 25 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
Jan 02 Python
详解Pycharm与anaconda安装配置指南
Aug 25 Python
利用Python发送邮件或发带附件的邮件
Nov 12 Python
写好Python代码的几条重要技巧
May 21 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
Sep 23 Python
python如何利用cv2.rectangle()绘制矩形框
Dec 24 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
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
php设计模式之委托模式
2016/02/13 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
php 将json格式数据转换成数组的方法
2018/08/21 PHP
在textarea中显示html页面的javascript代码
2007/04/20 Javascript
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
查询json的数据结构的8种方式简介
2014/03/10 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
vue中使用GraphQL的实例代码
2019/11/04 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
js实现简单的秒表
2020/01/16 Javascript
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
详解Python爬虫的基本写法
2016/01/08 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
TensorFlow高效读取数据的方法示例
2018/02/06 Python
python中退出多层循环的方法
2018/11/27 Python
深入浅析Python中的迭代器
2019/06/04 Python
python turtle 绘制太极图的实例
2019/12/18 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
基于python检查矩阵计算结果
2020/05/21 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
介绍一下OSI七层模型
2012/07/03 面试题
英语一分钟演讲稿
2014/04/29 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书