如何解决使用python asyncio和socket实现异步聊天的问题
我正在尝试与多个用户实现异步聊天,但是它仅适用于一个用户。我的服务器忽略了其他用户的连接,我不明白为什么。此外,当第一个用户断开连接时,服务器将自行关闭。我的代码:
import asyncio
import socket
class Server:
"""Class of the server"""
def __init__(self,ip: str,port: int):
self.ip = ip
self.port = port
self.all_clients = []
self.main_loop = asyncio.get_event_loop()
self.server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
self.server.bind((str(self.ip),int(self.port)))
#self.server.setblocking(False)
self.server.listen(5)
# self.main_loop.run_forever()
self.main_loop.run_until_complete(self.start())
# self.accept_clients()
async def start(self) -> None:
await self.main_loop.create_task(self.accept_clients())
async def accept_clients(self) -> None:
"""Acceptation of all clients requests"""
while True:
client_socket,client_address = await self.main_loop.sock_accept(self.server)
self.all_clients.append(client_socket)
print(f'{client_address} connected')
await self.main_loop.create_task(self.handle_clients(client_socket))
# await self.handle_clients(client_socket)
async def send_message(self,message: bytes):
"""Send client's message to other clients"""
for client in self.all_clients:
await self.main_loop.sock_sendall(client,message)
async def handle_clients(self,client_socket: socket.socket) -> None:
"""Listens to client's messages"""
while True:
message = await self.main_loop.sock_recv(client_socket,1024)
if not message:
break
await self.send_message(message)
print(self.all_clients)
if __name__ == '__main__':
server = Server('127.0.0.1',8000)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。