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 相关文章推荐
使用python3+xlrd解析Excel的实例
May 04 Python
Python实现的txt文件去重功能示例
Jul 07 Python
python实现各种插值法(数值分析)
Jul 30 Python
tesserocr与pytesseract模块的使用方法解析
Aug 30 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
python3操作注册表的方法(Url protocol)
Feb 05 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
Apr 24 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
Pycharm操作Git及GitHub的步骤详解
Oct 27 Python
Pytest测试框架基本使用方法详解
Nov 25 Python
Pandas DataFrame求差集的示例代码
Dec 13 Python
Django项目在pycharm新建的步骤方法
Mar 02 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中关于普通表单多文件上传的处理方法
2011/03/25 PHP
开源php中文分词系统SCWS安装和使用实例
2014/04/11 PHP
php上传图片获取路径及给表单字段赋值的方法
2016/01/23 PHP
php while循环控制的简单实例
2016/05/30 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
js捕获鼠标滚轮事件代码
2013/12/16 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
2015/06/24 Javascript
js计算系统当前日期是星期几的方法
2016/07/14 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
react实现pure render时bind(this)隐患需注意!
2017/03/09 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
webpack4 处理SCSS的方法示例
2018/09/03 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
[03:18]【TI9纪实】社区大触GL与木木
2019/08/25 DOTA
Python异步操作MySQL示例【使用aiomysql】
2019/05/16 Python
java判断三位数的实例讲解
2019/06/10 Python
python celery分布式任务队列的使用详解
2019/07/08 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
python保留小数位的三种实现方法
2020/01/07 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
屏蔽Django admin界面添加按钮的操作
2020/03/11 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
浅谈css3中calc在less编译时被计算的解决办法
2017/12/04 HTML / CSS
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
企业宣传策划方案
2014/05/29 职场文书
乡镇领导班子四风对照检查材料
2014/09/27 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang