体育视频网站建设,郑州高端网站案例,站群网站建设推广,甘肃路桥建设集团公司网站1. 说明
在Python中开发TCP/IP服务器有两种方式#xff0c;一种使用Socket#xff0c;需要在py文件中引入对应的socket包#xff0c;这种方式只能执行单项任务#xff1b;另一种方式使用Asyncio异步编程#xff0c;可以一次创建多个服务器执行不同的任务。
2. 接口说明 …1. 说明
在Python中开发TCP/IP服务器有两种方式一种使用Socket需要在py文件中引入对应的socket包这种方式只能执行单项任务另一种方式使用Asyncio异步编程可以一次创建多个服务器执行不同的任务。
2. 接口说明
1. asyncio.start_server(callback,ip,port) # 生成一个异步服务器,调用后会自动传给回调函数两个参数writer和readercallback: 回调函数异步操作均在此函数中执行ip: ip地址可以为空,表明接受任意ip的连接port: 端口号
2. serve_forever() # 循环执行,接受连接直到协程被取消
3. asyncio.wait_forfunc,time # 等待执行func: 等待执行结束的函数time: 等待时间可以为None表示无限等待
4. writer.write() # 向客户端发送数据
5. writer.drain() # 发送数据后用于清空套接字需要和writer.write()一起使用
6. reader.read() # 从客户端读取数据
7. writer.close() # 关闭套接字同时会关闭协程和当前的服务器
8. writer.wait_closed() # 等待套接字完全关闭需要和writer.close()一起使用
9. writer.is_closing() # 判断连接是否是断开状态3. 简单案例
创建一个tcp服务器并实现数据的接受和发送
from datetime import datetime
import asyncio# 服务器的回调函数
async def script_handle(reader, writer): # reader和writer参数是asyncio.start_server生成异步服务器后自动传入进来的while True: # 循环接受数据直到套接字关闭# wait_for等待读取数据第二个参数为等待时间(None表示无限等待)data await asyncio.wait_for(reader.read(2**10), None)if not data:print(script client disconnected)writer.close() # 关闭套接字await writer.wait_closed() # 等待套接字完全关闭returnprint(received data: , data.decode())writer.write(data.encode()) # 发送数据await writer.drain() # 发送数据后清空套接字# 主函数
async def main():# 生成一个服务器server await asyncio.start_server(script_handle,host,port8888)# 获取请求连接的客户端信息addr server.sockets[0].getsockname()print(fServing on {addr})# 处理多个请求永远执行着调用async with server:await server.serve_forever()if __name__ __main__:try:asyncio.run(main())except KeyboardInterrupt:print(datetime.now().strftime(%Y/%m/%d %H:%M:%S.%f),script server exit by key)运行此脚本即可接受客户端的正常连接和信息传输。