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采用requests库模拟登录和抓取数据的简单示例
Jul 05 Python
python基于xml parse实现解析cdatasection数据
Sep 30 Python
使用Python编写简单的画图板程序的示例教程
Dec 08 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
Dec 25 Python
解决python读取几千万行的大表内存问题
Jun 26 Python
selenium3+python3环境搭建教程图解
Dec 07 Python
新年快乐! python实现绚烂的烟花绽放效果
Jan 30 Python
对python判断ip是否可达的实例详解
Jan 31 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
详解numpy矩阵的创建与数据类型
Oct 18 Python
Python接口测试get请求过程详解
Feb 28 Python
django处理select下拉表单实例(从model到前端到post到form)
Mar 13 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中使用Oracle数据库(3)
2006/10/09 PHP
删除及到期域名的查看(抢域名必备哦)
2008/05/14 PHP
php下获取客户端ip地址的函数
2010/03/15 PHP
解析php中const与define的应用区别
2013/06/18 PHP
thinkphp中session和cookie无效的解决方法
2014/12/19 PHP
php数组转成json格式的方法
2015/03/09 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
利用PHP判断文件是否为图片的方法总结
2017/01/06 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
JavaScript定义变量和变量优先级问题探讨
2014/10/11 Javascript
JavaScript中的pow()方法使用详解
2015/06/15 Javascript
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
2017/06/26 jQuery
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
微信小程序点击控件修改样式实例详解
2017/07/07 Javascript
微信小程序实现弹出菜单功能
2018/06/12 Javascript
Angular(5.2->6.1)升级小结
2018/12/27 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
JS实现炫酷轮播图
2020/11/15 Javascript
跟老齐学Python之用Python计算
2014/09/12 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
Python字典循环添加一键多值的用法实例
2019/01/20 Python
在Python中通过getattr获取对象引用的方法
2019/01/21 Python
pytorch 求网络模型参数实例
2019/12/30 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
python脚本监控logstash进程并邮件告警实例
2020/04/28 Python
详解python程序中的多任务
2020/09/16 Python
Python-openpyxl表格读取写入的案例详解
2020/11/02 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
自我评价如何写好?
2014/01/05 职场文书
元宵节晚会主持人串词
2014/03/25 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书