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 相关文章推荐
pyqt4教程之widget使用示例分享
Mar 07 Python
Python Web开发模板引擎优缺点总结
May 06 Python
wxPython的安装图文教程(Windows)
Dec 28 Python
python读取中文txt文本的方法
Apr 12 Python
Centos部署django服务nginx+uwsgi的方法
Jan 02 Python
详解Python 切片语法
Jun 10 Python
Python时间序列缺失值的处理方法(日期缺失填充)
Aug 11 Python
Python numpy线性代数用法实例解析
Nov 15 Python
Python ORM编程基础示例
Feb 02 Python
Python Opencv轮廓常用操作代码实例解析
Sep 01 Python
使用Python+Appuim 清理微信的方法
Jan 26 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 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
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
php smarty truncate UTF8乱码问题解决办法
2014/06/13 PHP
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
【消息提示组件】,兼容IE6/7&&FF2
2007/09/04 Javascript
javascript 动态加载 css 方法总结
2009/07/11 Javascript
自己的js工具_Form 封装
2009/08/21 Javascript
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
也说JavaScript中String类的replace函数
2011/09/22 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
javascript遍历控件实例详细解析
2014/01/10 Javascript
Javascript中的call()方法介绍
2015/03/15 Javascript
JQuery实现级联下拉框效果实例讲解
2015/09/17 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
关于JavaScript的单双引号嵌套问题
2017/08/20 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
[51:28]EG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/16 DOTA
python内存管理分析
2015/04/08 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
python logging添加filter教程
2019/12/24 Python
python中threading和queue库实现多线程编程
2021/02/06 Python
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
小学生期末评语
2014/04/21 职场文书
林肯就职演讲稿
2014/05/19 职场文书
运动会宣传口号
2014/06/09 职场文书
民族团结好少年事迹材料
2014/08/19 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书