Python实现socket非阻塞通讯功能示例


Posted in Python onNovember 06, 2019

本文实例讲述了Python实现socket非阻塞通讯功能。分享给大家供大家参考,具体如下:

非阻塞需要多线程编程

服务端

方式1: 使用threading库实现多线程

基本方法和单进程基本写法一致, 将收发部分封装为函数以便开启其他线程:

import socket
import time
import threading
def handle_socket(conn, addr):
  while True:
    data = conn.recv(1024)
    print(data.decode('utf-8'))
    time.sleep(3)
    send_data = 'got it'
    conn.send(send_data.encode('utf-8'))
  conn.close()

基本设置和调用部分: 绑定, 监听, 接受连接:

if __name__ == '__main__':
  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  s.bind(('0.0.0.0', 8888))
  s.listen()
  while True:
    conn, addr = s.accept()
    client_thread = threading.Thread(target=handle_socket, args=[conn, addr])
    client_thread.start()

方式2: 通过继承StreamRequestHandler库实现多线程

收发部分写到handle方法中:

import socketserver
from socketserver import StreamRequestHandler
import time
class MyHandler(StreamRequestHandler):
  def handle(self):
    # addr = self.request.getpeername()
    # print('get connection from ', addr)
    # self.wfile.write('hello, thank for your connection'.encode())
    while True:
      datarecv = self.request.recv(1024)
      if not datarecv:
        break
      time.sleep(3)
      print(datarecv.decode())
      self.request.send("got it".encode())

开启

myserver = socketserver.ThreadingTCPServer(('127.0.0.1', 8888), MyHandler)
myserver.serve_forever()

客户端

客户端:

import socket
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.connect(('127.0.0.1', 8888))
while True:
  conn.send('hello'.encode())
  data = conn.recv(1024)
  print(data.decode())

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
Python实现的最近最少使用算法
Jul 10 Python
Python基于pygame实现的弹力球效果(附源码)
Nov 11 Python
Python中将字典转换为列表的方法
Sep 21 Python
利用aardio给python编写图形界面
Aug 21 Python
Django中间件工作流程及写法实例代码
Feb 06 Python
python 高效去重复 支持GB级别大文件的示例代码
Nov 08 Python
使用Django连接Mysql数据库步骤
Jan 15 Python
Pycharm+Scrapy安装并且初始化项目的方法
Jan 15 Python
如何运行.ipynb文件的图文讲解
Jun 27 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
Jun 03 Python
pycharm如何设置官方中文(如何汉化)
Dec 29 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 #Python
详解Python list和numpy array的存储和读取方法
Nov 06 #Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
Nov 06 #Python
Python list与NumPy array 区分详解
Nov 06 #Python
Django实现WebSSH操作物理机或虚拟机的方法
Nov 06 #Python
django 简单实现登录验证给你
Nov 06 #Python
Python数据可视化:箱线图多种库画法
Nov 06 #Python
You might like
DC动画电影《黑暗正义联盟》曝预告 5月5日上线数字平台
2020/04/09 欧美动漫
PHP中防止SQL注入方法详解
2014/12/25 PHP
PHP屏蔽关键字实现方法
2016/11/17 PHP
javascript中的几个运算符
2007/06/29 Javascript
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
jquery 学习笔记一
2010/04/07 Javascript
表单类各种类型(文本框)失去焦点效果jquery代码
2013/04/26 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
使用jquery.validate自定义方法实现"手机号码或者固话至少填写一个"的逻辑验证
2014/09/01 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
Fullpage.js固定导航栏-实现定位导航栏
2016/03/17 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
angular的输入和输出的使用方法
2018/09/22 Javascript
Vue Router history模式的配置方法及其原理
2019/05/30 Javascript
解决VUE双向绑定失效的问题
2019/10/29 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
python实现装饰器、描述符
2018/02/28 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
2019/08/09 Python
python3 实现函数写文件路径的正确方法
2019/11/27 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
pandas读取csv文件提示不存在的解决方法及原因分析
2020/04/21 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
Bed Bath & Beyond加拿大官网:购买床上用品、浴巾、厨房电器等
2019/10/04 全球购物
导游词之广东佛山(南风古灶)
2019/09/24 职场文书
导游词之江西赣州
2019/10/15 职场文书
两行代码解决Jupyter Notebook中文不能显示的问题
2021/04/24 Python
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL