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中的作用域规则详解
Jan 30 Python
json跨域调用python的方法详解
Jan 11 Python
python SSH模块登录,远程机执行shell命令实例解析
Jan 12 Python
Python获取指定字符前面的所有字符方法
May 02 Python
Python爬虫包BeautifulSoup学习实例(五)
Jun 17 Python
Python实现端口检测的方法
Jul 24 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
Dec 04 Python
python创造虚拟环境方法总结
Mar 04 Python
python sorted函数的小练习及解答
Sep 18 Python
python numpy存取文件的方式
Apr 01 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
Jun 12 Python
python 实现批量图片识别并翻译
Nov 02 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生成静态页面分析 模板+缓存+写文件
2009/08/17 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
javascript实现的基于金山词霸网络翻译的代码
2010/01/15 Javascript
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
js中function()使用方法
2013/12/24 Javascript
JavaScript获取页面中表单(form)数量的方法
2015/04/03 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
jQuery遍历json的方法(推荐)
2016/06/12 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
bootstrap multiselect 多选功能实现方法
2017/06/05 Javascript
JS实现页面打印(整体、局部)
2017/08/18 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
JavaScript使用闭包模仿块级作用域操作示例
2019/01/21 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
[47:03]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第二场 12.10
2020/12/13 DOTA
在Python中使用列表生成式的教程
2015/04/27 Python
在Django框架中伪造捕捉到的URLconf值的方法
2015/07/18 Python
python实现简单点对点(p2p)聊天
2017/09/13 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
django连接mysql数据库及建表操作实例详解
2019/12/10 Python
pytorch forward两个参数实例
2020/01/17 Python
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
哄娃神器4moms商店:美国婴童用品品牌
2019/03/07 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
培训主管的岗位职责
2013/11/23 职场文书
平面设计师工作职责范文
2013/12/03 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
酒店前台岗位职责
2015/04/16 职场文书
《天使的翅膀》读后感3篇
2019/12/20 职场文书