使用asyncio写一个TCP服务端,服务端收到一个数据后,将数据转发给所有其他客户端。
时间: 2023-04-05 09:01:32 浏览: 156
tcp服务端与多个客户端进行通信
好的,我可以回答这个问题。以下是使用asyncio写一个TCP服务端的示例代码:
```python
import asyncio
class Server:
def __init__(self):
self.clients = []
async def handle_client(self, reader, writer):
self.clients.append(writer)
while True:
data = await reader.read(1024)
if not data:
break
for client in self.clients:
if client != writer:
client.write(data)
await client.drain()
self.clients.remove(writer)
writer.close()
async def start(self):
server = await asyncio.start_server(self.handle_client, 'localhost', 8888)
async with server:
await server.serve_forever()
if __name__ == '__main__':
server = Server()
asyncio.run(server.start())
```
这个服务端会在本地的8888端口监听TCP连接,当有客户端连接上来时,会将客户端的writer对象添加到一个列表中。当服务端收到数据时,会将数据转发给列表中的所有其他客户端。当客户端断开连接时,会将其对应的writer对象从列表中移除。
阅读全文