import asyncio

clients = set()

async def handle_client(reader, writer):
    clients.add(writer)
    addr = writer.get_extra_info('peername')
    print(f"{addr} 已连接")
    
    try:
        await broadcast(f"{addr} 已加入聊天室。\n")
        writer.write("欢迎来到聊天室!\n".encode())
        await writer.drain()

        while True:
            data = await reader.readline()
            if not data:
                break
            message = data.decode().strip()
            await broadcast(f"{addr}: {message}\n", exclude=writer)
    finally:
        clients.remove(writer)
        await broadcast(f"{addr} 已离开聊天室。\n")
        writer.close()
        await writer.wait_closed()
        print(f"{addr} 已断开连接")

async def broadcast(message, exclude=None):
    for client in clients:
        if client != exclude:
            client.write(message.encode())
            await client.drain()

async def main():
    server = await asyncio.start_server(handle_client, 'localhost', 8000)
    addr = server.sockets[0].getsockname()
    print(f'聊天服务器运行在 {addr}')

    async with server:
        await server.serve_forever()

if __name__ == "__main__":
    asyncio.run(main())

 

赞(0) 打赏

支付宝扫一扫打赏

微信扫一扫打赏

标签:

上一篇:

下一篇:

相关推荐

0 条评论关于"python聊天室"

表情

最新评论

    暂无留言哦~~