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数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
Sep 28 Python
Python使用arrow库优雅地处理时间数据详解
Oct 10 Python
Python+OpenCV实现车牌字符分割和识别
Mar 31 Python
python实现汽车管理系统
Nov 30 Python
python生成器与迭代器详解
Jan 01 Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 Python
django的ORM模型的实现原理
Mar 04 Python
python仿evething的文件搜索器实例代码
May 13 Python
python中设置超时跳过,超时退出的方式
Dec 13 Python
keras 如何保存最佳的训练模型
May 25 Python
Spring http服务远程调用实现过程解析
Jun 11 Python
selenium学习教程之定位以及切换frame(iframe)
Jan 04 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
MySQL中create table语句的基本语法是
2007/01/15 PHP
dedecms采集中可以过滤多行代码的正则表达式
2007/03/17 PHP
php 数组的创建、调用和更新实现代码
2009/03/09 PHP
PHP 危险函数解释 分析
2009/04/22 PHP
php strrpos()与strripos()函数
2013/08/31 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
PHP重载基础知识回顾
2020/09/10 PHP
手机开发必备技巧:javascript及CSS功能代码分享
2015/05/25 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
2015/09/09 Javascript
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
vue+element搭建后台小总结 el-dropdown下拉功能
2020/04/10 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
[02:56]DOTA2矮人直升机 英雄基础教程
2013/11/26 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
Python爬虫利用cookie实现模拟登陆实例详解
2017/01/12 Python
Python实现的简单模板引擎功能示例
2017/09/02 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
python 实现敏感词过滤的方法
2019/01/21 Python
Python使用get_text()方法从大段html中提取文本的实例
2019/08/27 Python
用python解压分析jar包实例
2020/01/16 Python
python读取与处理netcdf数据方式
2020/02/14 Python
什么是Python中的顺序表
2020/06/02 Python
Python新手学习装饰器
2020/06/04 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
酒店应聘自荐信
2013/11/09 职场文书
文秘求职信范文
2014/04/10 职场文书
最新优秀教师个人先进事迹材料
2014/05/06 职场文书
政府班子四风问题整改措施
2014/10/04 职场文书
迎新生标语大全
2014/10/06 职场文书
MySQL 数据类型详情
2021/11/11 MySQL