python中协程实现TCP连接的实例分析


Posted in Python onOctober 14, 2018

在网络通信中,每个连接都必须创建新线程(或进程) 来处理,否则,单线程在处理连接的过程中, 无法接受其他客户端的连接。所以我们尝试使用协程来实现服务器对多个客户端的响应。

与单一TCP通信的构架一样,只是使用协程来实现多个任务同时进行。

#服务端

import socket

from gevent import monkey

import gevent

monkey.patch_all()

def handle_conn(seObj):

  while True:

    re_Data = seObj.recv(1024).decode('utf-8')

    if re_Data == 'quit':

      break

    print('client>>',re_Data)

    value = input("server>>")

    se_Data = seObj.send(value.encode('utf-8'))

    if se_Data == 'quit':

      break

if __name__ == '__main__':

  server = socket.socket()

  server.bind(('192.168.1.227',9876))

  print("服务已开启")

  server.listen(4)

  while True:

    seObj,add = server.accept()

    gevent.spawn(handle_conn,seObj)

  seObj.close()

  server.close()
import socket

 

# 1. 创建客户端的socket对象

client = socket.socket()

# 2. 连接服务端, 需要指定端口和IP

client.connect(('192.168.1.227',9876))

while True:

  # 3. 给服务端发送数据

  send_data = input("client:>")

  client.send(send_data.encode('utf-8'))

  if send_data == 'quit':

    break

  # 4. 获取服务端返回的消息

  recv_data = client.recv(1024).decode('utf-8')

  if recv_data == 'quit':

    break

  print("server:>%s" %(recv_data))

# 5. 关闭socket连接

client.close()

以上就是python中协程实现TCP连接的代码示例的详细内容,感谢大家对三水点靠木的支持。

Python 相关文章推荐
利用QT写一个极简单的图形化Python闹钟程序
Apr 07 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
Jan 20 Python
Python爬虫DOTA排行榜爬取实例(分享)
Jun 13 Python
Django 前后台的数据传递的方法
Aug 08 Python
Python实现爬取需要登录的网站完整示例
Aug 19 Python
Python编程使用NLTK进行自然语言处理详解
Nov 16 Python
python使用正则表达式来获取文件名的前缀方法
Oct 21 Python
对Python3 pyc 文件的使用详解
Feb 16 Python
python sort、sort_index方法代码实例
Mar 28 Python
使用python模拟高斯分布例子
Dec 09 Python
Python使用psutil获取进程信息的例子
Dec 17 Python
openstack中的rpc远程调用的方法
Jul 09 Python
解决python "No module named pip" 的问题
Oct 13 #Python
pycharm运行出现ImportError:No module named的解决方法
Oct 13 #Python
python机器学习之神经网络实现
Oct 13 #Python
Python pyinotify模块实现对文档的实时监控功能方法
Oct 13 #Python
基于pycharm导入模块显示不存在的解决方法
Oct 13 #Python
解决PyCharm import torch包失败的问题
Oct 13 #Python
python3+requests接口自动化session操作方法
Oct 13 #Python
You might like
聊天室php&mysql(六)
2006/10/09 PHP
数据库的日期格式转换
2006/10/09 PHP
一个捕获函数输出的函数
2007/02/14 PHP
javascript call方法使用说明
2010/01/11 Javascript
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
JavaScript Accessor实现说明
2010/12/06 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
js实现微博发布小功能
2017/01/12 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
2019/09/25 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python中__call__用法实例
2014/08/29 Python
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
python3音乐播放器简单实现代码
2020/04/20 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
浅析python参数的知识点
2018/12/10 Python
Django 拆分model和view的实现方法
2019/08/16 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
销售文员的岗位职责
2013/11/20 职场文书
Java反应式框架Reactor中的Mono和Flux
2021/07/25 Java/Android
python库sklearn常用操作
2021/08/23 Python