Python socket处理client连接过程解析


Posted in Python onMarch 18, 2020

socket只能处理一个client连接,如果需要并发处理多个链接则需要使用socketserver,下面是代码示例以及注释

server端

import socketserver
#之前的socket只能同时处理一个客户端,当需要并发处理client发送的信息是需要使用到socketserver,下面创建一个类,继承socketserver其对应实例就有并发能力
class My_Tcp_Handler(socketserver.BaseRequestHandler):
  #下面的handler是自己定义的server与client交互的过程,所有交互过程都在此方法内部实现.方法名handle是固定的
  def handle(self):
    while True:
      try:
        #下面将收到的数据打印并且大写后发回给客户端
        self.data = self.request.recv(1024)
        print(self.data.decode(encoding="utf-8"))
        self.send_data = self.data.decode(encoding="utf-8").upper().encode(encoding="utf-8")
        self.request.sendall(self.send_data)
      except ConnectionResetError as e:
        print("一个客户端关闭了连接")
        break

#实例化socketserver
My_server = socketserver.ThreadingTCPServer(("0.0.0.0", 8888), My_Tcp_Handler) #ThreadingTCPServer是使用多线程,ForkingTCPServer是使用多进程处理并发
#启动实例
My_server.serve_forever()

下面是client端

import socket
client = socket.socket()
client.connect(("127.0.0.1", 8888))
while True:
  msg = input()
  if len(msg) == 0:
    continue
  client.send(msg.encode(encoding="utf-8")) #如果发送中文需要对其进行encode,接收也需要decode;英文前面直接加b指定类型
  client_rec = client.recv(1024).decode(encoding="utf-8")
  print("client_rec:", client_rec)
client.close()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
举例讲解Python中的死锁、可重入锁和互斥锁
Nov 05 Python
python模块smtplib学习
May 22 Python
对json字符串与python字符串的不同之处详解
Dec 19 Python
详解python中@的用法
Mar 27 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
使用python实现离散时间傅里叶变换的方法
Sep 02 Python
pytorch下大型数据集(大型图片)的导入方式
Jan 08 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
Feb 25 Python
pytorch查看通道数 维数 尺寸大小方式
May 26 Python
Python数据可视化图实现过程详解
Jun 12 Python
keras 模型参数,模型保存,中间结果输出操作
Jul 06 Python
python redis存入字典序列化存储教程
Jul 16 Python
python selenium自动化测试框架搭建的方法步骤
Jun 14 #Python
Python如何使用paramiko模块连接linux
Mar 18 #Python
Python selenium页面加载慢超时的解决方案
Mar 18 #Python
Python Selenium 设置元素等待的三种方式
Mar 18 #Python
Python多线程threading join和守护线程setDeamon原理详解
Mar 18 #Python
Python semaphore evevt生产者消费者模型原理解析
Mar 18 #Python
Python中remove漏删和索引越界问题的解决
Mar 18 #Python
You might like
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
thinkphp 一个页面使用2次分页的实现方法
2013/07/15 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
javascript在事件监听方面的兼容性小结
2010/04/07 Javascript
javascript之bind使用介绍
2011/10/09 Javascript
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
基于javascript的JSON格式页面展示美化方法
2014/07/02 Javascript
jQuery定义背景动态切换效果的方法
2015/03/23 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
js实现菜单跳转效果
2020/12/11 Javascript
python类型强制转换long to int的代码
2013/02/10 Python
python使用Berkeley DB数据库实例
2014/09/26 Python
Python程序中使用SQLAlchemy时出现乱码的解决方案
2015/04/24 Python
unittest+coverage单元测试代码覆盖操作实例详解
2018/04/04 Python
pytorch多GPU并行运算的实现
2019/09/27 Python
Python字典底层实现原理详解
2019/12/18 Python
PyInstaller运行原理及常用操作详解
2020/06/13 Python
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
中文专业毕业生自荐信
2013/10/28 职场文书
表彰先进的通报
2014/01/31 职场文书
敬老院院长事迹材料
2014/05/21 职场文书
省级优秀毕业生主要事迹
2014/05/29 职场文书
会议通知
2015/04/15 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
人民币使用说明书
2019/04/17 职场文书
Python+Appium自动化测试的实战
2021/06/30 Python
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏