在线文字转语音网站:无界智能 aiwjzn.com

Python使用 asyncio 实现 TCP/UDP Socket 编程

环境搭建和准备工作: 1. 首先,确保你已经安装了Python3版本。 2. 安装asyncio库,可以通过运行以下命令进行安装: shell pip install asyncio 依赖的类库: 1. asyncio:Python内置的异步IO库,用于处理异步编程。 2. socket:Python标准库,提供了底层的网络接口。 样例实现: 下面是一个使用asyncio实现TCP和UDP Socket编程的完整示例: python import asyncio # TCP Socket示例 async def tcp_echo_client(message): reader, writer = await asyncio.open_connection('localhost', 8888) print(f'Send: {message!r}') writer.write(message.encode()) data = await reader.read(100) print(f'Received: {data.decode()!r}') print('Close the connection') writer.close() await writer.wait_closed() async def tcp_echo_server(): server = await asyncio.start_server(handle_echo, 'localhost', 8888) addr = server.sockets[0].getsockname() print(f'Serving on {addr}') async with server: await server.serve_forever() async def handle_echo(reader, writer): data = await reader.read(100) message = data.decode() addr = writer.get_extra_info('peername') print(f"Received {message!r} from {addr!r}") print(f"Send: {message!r}") writer.write(data) await writer.drain() print("Close the connection") writer.close() # UDP Socket示例 async def udp_echo_client(message): transport, protocol = await asyncio.get_event_loop().create_datagram_endpoint( lambda: EchoClientProtocol(message), remote_addr=('localhost', 8888)) await asyncio.sleep(0.1) transport.close() class EchoClientProtocol(asyncio.DatagramProtocol): def __init__(self, message): self.message = message self.transport = None def connection_made(self, transport): self.transport = transport self.transport.sendto(self.message.encode()) def datagram_received(self, data, addr): print(f"Received {data.decode()} from {addr}") def error_received(self, exc): print('Error received:', exc) def connection_lost(self, exc): print("Connection closed") async def udp_echo_server(): sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(('localhost', 8888)) while True: data, addr = await asyncio.get_event_loop().sock_recvfrom(sock, 100) message = data.decode() print(f"Received {message!r} from {addr!r}") print(f"Send: {message!r}") await asyncio.get_event_loop().sock_sendto(sock, data, addr) # 启动TCP和UDP Server async def main(): tcp_server = tcp_echo_server() udp_server = udp_echo_server() await asyncio.gather(tcp_server, udp_server) asyncio.run(main()) 总结: 以上是使用asyncio库实现TCP和UDP Socket编程的示例。asyncio提供了一种异步IO编程模型,使得在处理并发任务时更为简单和高效。在示例中,我们使用了asyncio库提供的函数和类来处理TCP和UDP Socket通信。 通过详细的代码示例,我们可以清楚地了解到如何使用asyncio进行异步编程来实现Socket通信。