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 相关文章推荐
Python描述器descriptor详解
Feb 03 Python
Python中音频处理库pydub的使用教程
Jun 07 Python
python操作列表的函数使用代码详解
Dec 28 Python
记录Python脚本的运行日志的方法
Jun 05 Python
远程部署工具Fabric详解(支持Python3)
Jul 04 Python
python3.6+selenium实现操作Frame中的页面元素
Jul 16 Python
Python 导入文件过程图解
Oct 15 Python
详解Python直接赋值,深拷贝和浅拷贝
Jul 09 Python
Python爬虫设置ip代理过程解析
Jul 20 Python
python对 MySQL 数据库进行增删改查的脚本
Oct 22 Python
python脚本定时发送邮件
Dec 22 Python
Python 中的单分派泛函数你真的了解吗
Jun 22 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
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
PHP7.0安装笔记整理
2015/08/28 PHP
PHP如何读取由JavaScript设置的Cookie
2017/03/22 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
2019/08/14 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
在网页中控制wmplayer播放器
2006/07/01 Javascript
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
2014/03/12 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
jquery.validate使用详解
2016/06/02 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
AngularJS实现动态添加Option的方法
2017/05/17 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
解决vue-cli webpack打包后加载资源的路径问题
2018/09/25 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
python算法演练_One Rule 算法(详解)
2017/05/17 Python
几种实用的pythonic语法实例代码
2018/02/24 Python
Python实现的读写json文件功能示例
2018/06/05 Python
Python使用reportlab模块生成PDF格式的文档
2019/03/11 Python
Python版中国省市经纬度
2020/02/11 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
2020/05/10 Python
keras slice layer 层实现方式
2020/06/11 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
岗位说明书范文
2014/05/07 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
2014年最新领导班子整改方案
2014/09/27 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
同事打架检讨书
2015/05/06 职场文书
领导欢送会主持词
2015/07/06 职场文书