-
Notifications
You must be signed in to change notification settings - Fork 0
/
tcp-server.py
49 lines (35 loc) · 1.15 KB
/
tcp-server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import asyncio
clients = []
async def handle_tcp_client(reader, writer):
addr = writer.get_extra_info('peername')
print(f"Connected with {addr}")
clients.append(writer)
try:
while True:
data = await reader.read(1024)
message = data.decode('utf-8')
if not message:
break
print(f"Received from {addr}: {message}")
await broadcast_message(message, writer)
except asyncio.CancelledError:
print(f"Connection with {addr} closed.")
finally:
clients.remove(writer)
writer.close()
await writer.wait_closed()
async def broadcast_message(message, sender):
for client in clients:
if client != sender:
client.write(message.encode('utf-8'))
await client.drain()
async def start_tcp_server():
server = await asyncio.start_server(handle_tcp_client, 'localhost', 6789, limit=2)
addr = server.sockets[0].getsockname()
print(f"Serving on {addr}")
async with server:
await server.serve_forever()
def main():
asyncio.run(start_tcp_server())
if __name__ == "__main__":
main()