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实现实例
Apr 26 Python
Python实现爬取逐浪小说的方法
Jul 07 Python
如何使用python爬取csdn博客访问量
Feb 14 Python
python SMTP实现发送带附件电子邮件
May 22 Python
Python转换时间的图文方法
Jul 01 Python
python统计指定目录内文件的代码行数
Sep 19 Python
Python的几种主动结束程序方式
Nov 22 Python
Python 过滤错误log并导出的实例
Dec 26 Python
在django中使用apscheduler 执行计划任务的实现方法
Feb 11 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
JAVA及PYTHON质数计算代码对比解析
Jun 10 Python
python实现ping命令小程序
Dec 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 $_SERVER详解
2009/01/16 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
chrome原生方法之数组
2011/11/30 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
jQuery 选择器详解
2015/01/19 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
2017/02/17 Javascript
angular.js实现购物车功能
2017/10/23 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
2014/06/10 Python
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
Python Nose框架编写测试用例方法
2017/10/26 Python
numpy matrix和array的乘和加实例
2018/06/28 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
关于pymysql模块的使用以及代码详解
2019/09/01 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
2020/06/29 Python
详解Python openpyxl库的基本应用
2021/02/26 Python
Onzie官网:美国时尚瑜伽品牌
2019/08/21 全球购物
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
体育老师的教学自我评价分享
2013/11/19 职场文书
春风行动实施方案
2014/03/28 职场文书
2015中学教学工作总结
2015/07/22 职场文书
领导新年致辞2016
2015/07/29 职场文书
自信主题班会
2015/08/14 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书
Python基础详解之描述符
2021/04/28 Python
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏