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和C语言混合编程实例
Jun 04 Python
python实现udp数据报传输的方法
Sep 26 Python
利用python程序帮大家清理windows垃圾
Jan 15 Python
Python 3中的yield from语法详解
Jan 18 Python
Python使用django搭建web开发环境
Jun 09 Python
浅析使用Python操作文件
Jul 31 Python
python的dataframe转换为多维矩阵的方法
Apr 11 Python
python中类的输出或类的实例输出为这种形式的原因
Aug 12 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
Dec 04 Python
基于python的docx模块处理word和WPS的docx格式文件方式
Feb 13 Python
python模块与C和C++动态库相互调用实现过程示例
Nov 02 Python
Python 键盘事件详解
Nov 11 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
关于PHP结束标签的使用细节探讨及联想
2013/03/04 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
2013/07/16 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
2017/07/24 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
2018/01/15 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
微信小程序中转义字符的处理方法
2019/03/28 Javascript
jquery图片预览插件实现方法详解
2019/07/18 jQuery
一个手写的vue放大镜效果
2019/08/09 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
python异步任务队列示例
2014/04/01 Python
Python基于有道实现英汉字典功能
2015/07/25 Python
简单易懂的python环境安装教程
2017/07/13 Python
python实现list由于numpy array的转换
2018/04/04 Python
python实现计算器功能
2019/10/31 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
Python openpyxl模块原理及用法解析
2020/01/19 Python
Python的赋值、深拷贝与浅拷贝的区别详解
2020/02/12 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
最新会计专业求职信范文
2014/01/28 职场文书
会议邀请书范文
2014/02/02 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
2015重阳节座谈会主持词
2015/07/30 职场文书
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python