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循环监控远程端口的方法
Mar 14 Python
Python ldap实现登录实例代码
Sep 30 Python
利用Python查看目录中的文件示例详解
Aug 28 Python
pandas将DataFrame的列变成行索引的方法
Apr 10 Python
Pandas实现数据类型转换的一些小技巧汇总
May 07 Python
Python数据预处理之数据规范化(归一化)示例
Jan 08 Python
利用Python正则表达式过滤敏感词的方法
Jan 21 Python
python爬虫爬取微博评论案例详解
Mar 27 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
python小程序实现刷票功能详解
Jul 17 Python
Python 删除List元素的三种方法remove、pop、del
Nov 16 Python
python pygame 开发五子棋双人对弈
May 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
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
php mssql 日期出现中文字符的解决方法
2009/03/10 PHP
php中inlcude()性能对比详解
2012/09/16 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
PHP编程求最大公约数与最小公倍数的方法示例
2017/05/29 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
2019/03/07 PHP
PHP设计模式之简单工厂和工厂模式实例分析
2019/03/25 PHP
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
Dom 学习总结以及实例的使用介绍
2013/04/24 Javascript
Jquery网页出现的乱码问题的三种解决方法
2013/06/30 Javascript
用jquery实现的一个超级简单的下拉菜单
2014/05/18 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
原生js的数组除重复简单实例
2016/05/24 Javascript
JavaScript生成带有缩进的表格代码
2016/06/15 Javascript
jQuery flip插件实现的翻牌效果示例【附demo源码下载】
2016/09/20 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
vue监听滚动事件的方法
2020/12/21 Vue.js
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
[04:40]2016个国际邀请赛中国区预选赛场地——华西村观战指南
2016/06/25 DOTA
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
Pyecharts地图显示不完成问题解决方案
2020/05/11 Python
英国经济型酒店品牌:Travelodge
2019/12/17 全球购物
家居饰品店创业计划书
2014/01/31 职场文书
学生吸烟检讨书
2014/09/14 职场文书
预备党员自我评价范文
2015/03/04 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
企业管理不到位检讨书
2019/06/27 职场文书
MySQL分区路径子分区再分区
2022/04/13 MySQL