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执行系统命令的常见方法(全)
Oct 22 Python
Python用Bottle轻量级框架进行Web开发
Jun 08 Python
Mac中Python 3环境下安装scrapy的方法教程
Oct 26 Python
Python栈算法的实现与简单应用示例
Nov 01 Python
Windows上使用Python增加或删除权限的方法
Apr 24 Python
使用Python制作自动推送微信消息提醒的备忘录功能
Sep 06 Python
Flask框架web开发之零基础入门
Dec 10 Python
Python计算时间间隔(精确到微妙)的代码实例
Feb 26 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
如何通过python的fabric包完成代码上传部署
Jul 29 Python
pyqt5、qtdesigner安装和环境设置教程
Sep 25 Python
python定义具名元组实例操作
Feb 28 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 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
php使HTML标签自动补全闭合函数代码
2012/10/04 PHP
php版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
PHP中file_get_contents高?用法实例
2014/09/24 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
2015/10/31 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
Centos6.8下Node.js安装教程
2017/05/12 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
2019/09/19 Javascript
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
[51:34]Ti4主赛事胜者组 DK vs EG 2
2014/07/19 DOTA
python getopt 参数处理小示例
2009/06/09 Python
numpy排序与集合运算用法示例
2017/12/15 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
Pycharm无法显示动态图片的解决方法
2018/10/28 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
Python读写csv文件流程及异常解决
2020/10/20 Python
Python控制鼠标键盘代码实例
2020/12/08 Python
德国鞋子网上商店:Omoda.de
2017/03/31 全球购物
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
本科毕业生求职自荐信
2014/02/03 职场文书
工作能力自我评价2015
2015/03/05 职场文书
清明节随笔
2015/08/15 职场文书
Python使用海龟绘图实现贪吃蛇游戏
2021/06/18 Python
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers