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脚本实现网卡流量监控
Feb 14 Python
python绘制铅球的运行轨迹代码分享
Nov 14 Python
python实现kMeans算法
Dec 21 Python
Python Pywavelet 小波阈值实例
Jan 09 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 Python
python十进制转二进制的详解
Feb 07 Python
python json.dumps中文乱码问题解决
Apr 01 Python
浅谈python 调用open()打开文件时路径出错的原因
Jun 05 Python
使用anaconda安装pytorch的实现步骤
Sep 03 Python
Python字符串查找基本操作代码案例
Oct 27 Python
python实现图片转字符画
Feb 19 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
Apr 14 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教程 插件机制在PHP中实现方案
2012/11/02 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
PHP中shuffle数组值随便排序函数用法
2014/11/21 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
javascript 表单的友好用户体现
2009/01/07 Javascript
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
在js(jquery)中获得文本框焦点和失去焦点的方法
2012/12/04 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
jquery操作 iframe的方法
2014/12/03 Javascript
jQuery 弹出层插件(推荐)
2016/05/24 Javascript
jQuery ajax动态生成table功能示例
2017/06/14 jQuery
JavaScript实现元素滚动条到达一定位置循环追加内容
2017/12/28 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
详解JavaScript中的Object.is()与"==="运算符总结
2020/06/17 Javascript
Vue ​v-model相关知识总结
2021/01/28 Vue.js
Python标准库与第三方库详解
2014/07/22 Python
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
Python及Django框架生成二维码的方法分析
2018/01/31 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
Python输出\u编码将其转换成中文的实例
2018/12/15 Python
python 命名规范知识点汇总
2020/02/14 Python
通过python检测字符串的字母
2020/02/18 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
2021/03/04 Python
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
毕业生文员求职信
2013/11/03 职场文书
幼儿园五一活动方案
2014/02/07 职场文书
事假请假条范文
2014/04/11 职场文书
面试必备的求职信
2014/05/25 职场文书
“四风”问题对照检查材料思想汇报
2014/09/16 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
详解Java七大阻塞队列之SynchronousQueue
2021/09/04 Java/Android