使用 Clients and Servers

在上面的例子中,telnet是一个客户端。asyncio模块提供了一个协程方便你很容易的使用stream reader 和 writer来编写服务端和客户端。下面的代码演示了一个简单的echo server,该server监听localhost上的2222端口。你可以在Python的控制台中运行下面的代码,之后在另一个Python的控制台中运行客户端的代码作为客户端。

import asyncio

@asyncio.coroutine

def simple_echo_server():

# Start a socket server, call back for each client connected.

# The client_connected_handler coroutine will be automatically converted to a Task

yield from asyncio.start_server(client_connected_handler, 'localhost', 2222)

@asyncio.coroutine

def client_connected_handler(client_reader, client_writer):

# Runs for each client connected

# client_reader is a StreamReader object

# client_writer is a StreamWriter object

print("Connection received!")

while True:

data = yield from client_reader.read(8192)

if not data:

break

print(data)

client_writer.write(data)

loop = asyncio.get_event_loop()

loop.run_until_complete(simple_echo_server())

try:

loop.run_forever()

finally:

loop.close()

下面的代码演示了一个客户端程序连接了localhost上的2222端口,并且使用asyncio.StreamWriter对象写了几行数据,之后使用asyncio.StreamWriter对象读取服务端返回的数据。

import asyncio

LASTLINE = b'Last line.\n'

@asyncio.coroutine

def simple_echo_client():

# Open a connection and write a few lines by using the StreamWriter object

reader, writer = yield from asyncio.open_connection('localhost', 2222)

# reader is a StreamReader object

# writer is a StreamWriter object

writer.write(b'First line.\n')

writer.write(b'Second line.\n')

writer.write(b'Third line.\n')

writer.write(LASTLINE)

# Now, read a few lines by using the StreamReader object

print("Lines received")

while True:

line = yield from reader.readline()

print(line)

if line == LASTLINE or not line:

break

writer.close()

loop = asyncio.get_event_loop()

loop.run_until_complete(simple_echo_client())

python asyncio tcp server_Python 3.4 中新的 asyncio : Servers、Protocols 和 Transports相关推荐

  1. python asyncio tcp server_Python 的异步 IO:Asyncio 之 TCP Client

    关于 Asyncio 的其他文章: 如果不知道 Asyncio 是什么,先看「Asyncio 简介」那一篇. 一个简单的 HTTP Server 首先,为了便于测试,我们用 Python 内建的 ht ...

  2. python asyncio tcp server_asyncio异步IO——Streams详解

    前言 本文翻译自python3.7官方文档--asyncio-stream,译者马鸣谦,邮箱 1612557569@qq.com.转载请注明出处. 数据流(Streams) 数据流(Streams)是 ...

  3. python比较重要的模块_python中重要的模块--asyncio 转载

    转载自: https://www.cnblogs.com/zhaof/p/8490045.html 一直对asyncio这个库比较感兴趣,毕竟这是官网也非常推荐的一个实现高并发的一个模块,python ...

  4. python asyncio教程_在Python3中使用asyncio库进行快速数据抓取的教程

    web数据抓取是一个经常在python的讨论中出现的主题.有很多方法可以用来进行web数据抓取,然而其中好像并没有一个最好的办法.有一些如scrapy这样十分成熟的框架,更多的则是像mechanize ...

  5. python tcp服务器 多线程_Python中的多线程TCP服务器

    我使用python的threding模块创建了一个简单的多线程tcp服务器.每次连接新客户端时,该服务器都会创建一个新线程. #!/usr/bin/env python import socket, ...

  6. Python 中如何解决 asyncio 文件描述符最大数量限制问题

    文章目录 问题复现 问题分析 事件循环 EventLoop I/O 多路复用 select 的缺点 解决方法 1.更换事件循环选择器 2.限制并发量 3.修改最大文件描述符限制 Windows Lin ...

  7. python能调用身份证读卡器吗_用Python在Linux下调用新中新DKQ-A16D读卡器,读二代证数据...

    1.背景 最近在研究二代证读卡器,手头上的设备是新中新DKQ-A16D,在官网(https://www.onecardok.com.cn/download)逛了一圈,发现Win下的示例,浏览器插件很多 ...

  8. (6)Python爬虫——爬取中新网新闻

    工欲善其事,必先利其器.我们要进行数据挖掘,就必须先获取数据,获取数据的方法有很多种,其中一种就是爬虫.下面我们利用Python2.7,写一个爬虫,专门爬取中新网http://www.chinanew ...

  9. Python 3.8 稳定版正式发布,新特性全面解读

    早在之前关于 Python 新版本的文档在官方一就直处于更新模式中,就在昨日 Python 3.8 稳定版正式发布了,让我们来看看新版本有哪些新特性呢? Python 3.8.0 稳定版的新特性 1P ...

最新文章

  1. 【经验】【ORACLE】从字符串中截取其中的数字
  2. IE9(测试版)浏览器实用快捷键使用方法
  3. 刷脸支付弊端举例_刷脸支付的优势和弊端,你都知道?
  4. Log4J入门教程(二) 参数讲解
  5. MAC OSX在视图port哪个程序占用,杀死进程的方法
  6. 哈希存储 java_Java容器系列之HashMap的存储
  7. python format格式化输出填充符号不起作用_Python格式化输出——format用法示例
  8. CPU 是如何执行任务的
  9. (转载)查看Oracle字符集及怎样修改字符集
  10. 开源软件生态_基础,亮点和建立成功的开源生态系统
  11. 基于JAVA+SpringMVC+MYSQL的学生请假管理系统
  12. 在打字稿中,是什么! (惊叹号/ bang)运算符取消引用成员时?
  13. java 获取密码框密码,获得Windows下的密码框密码--编程学习网
  14. eclipse导入javaWeb项目
  15. java线程同步机制,实现同步锁
  16. Android 字符串求值工具(科学计算)
  17. Gradle配置及同一应用不同版本配置不同资源文件,不同签名,包名进行打包
  18. 2022年9月电子学会Python等级考试试卷(五级)答案解析
  19. Mac中Caps Lock(大写锁定键)为Control键(Emacs解放小拇指.)
  20. lpc1768的gpio库函数_LPC1768之GPIO输入和输出配置基础例程

热门文章

  1. 漫画 | 你看的每一篇Nature论文,都是这样出炉的!
  2. R语言ggplot2可视化:自定义设置X轴上的时间间隔(中断、以年为单位),使用scale_x_date()自定义设置坐标轴间隔和标签、添加标题、副标题、题注信息
  3. R语言使用tidyquant包的tq_transmute函数计算持有某只股票的天、月、周收益率、ggplot2使用条形图(bar plot)可视化股票年收益率数据使用不同的色彩表征正收益率和负收益率
  4. R语言可视化包ggplot2在一张图中画出两条线实战
  5. R语言optim函数进行函数优化实战(和lm函数进行对比)
  6. R假设检验之Jarque-Bera检验(Jarque-Bera Test)
  7. php 判断是不是前一天,PHP开发中,定时执行如何判断之前的脚本是否跑完?
  8. 创建windows窗口并且获得窗口句柄
  9. 【rnnoise源码分析】biquad滤波器
  10. LeetCode 746. Min Cost Climbing Stairs--动态规划--Java,C++,Python解法