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多线程(python多线程简明教程)
Jun 09 Python
快速排序的算法思想及Python版快速排序的实现示例
Jul 02 Python
Python编程实战之Oracle数据库操作示例
Jun 21 Python
python自动裁剪图像代码分享
Nov 25 Python
使用实现XlsxWriter创建Excel文件并编辑
May 04 Python
django js实现部分页面刷新的示例代码
May 28 Python
python3.6的venv模块使用详解
Aug 01 Python
python从子线程中获得返回值的方法
Jan 30 Python
详解Python3之数据指纹MD5校验与对比
Jun 11 Python
python打造爬虫代理池过程解析
Aug 15 Python
给Django Admin添加验证码和多次登录尝试限制的实现
Jul 26 Python
Python如何实现Paramiko的二次封装
Jan 30 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设计聊天室步步通
2006/10/09 PHP
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
PHP获取网站域名和地址的代码
2008/08/17 PHP
PHP写UltraEdit插件脚本实现方法
2011/12/26 PHP
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
php文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
php文件包含的几种方式总结
2019/09/19 PHP
JavaScript获取table中某一列的值的方法
2014/05/06 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
2015/01/09 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
javascript 中的console.log和弹出窗口alert
2016/08/30 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
node.js实现微信JS-API封装接口的示例代码
2017/09/06 Javascript
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
JavaScript根据json生成html表格的示例代码
2018/10/24 Javascript
微信小程序websocket聊天室的实现示例代码
2019/02/12 Javascript
python监控网卡流量并使用graphite绘图的示例
2014/04/27 Python
Python中文竖排显示的方法
2015/07/28 Python
定制FileField中的上传文件名称实例
2017/08/23 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
Python 将Matrix、Dict保存到文件的方法
2018/10/30 Python
Python判断是否json是否包含一个key的方法
2018/12/31 Python
简单了解python变量的作用域
2019/07/30 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
党员实事承诺书
2014/03/26 职场文书
临床专业自荐信
2014/06/22 职场文书
城市规划应届毕业生自荐信
2014/07/04 职场文书
岗位说明书怎么写
2014/07/30 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书