# 测试 echo server：先同时建立 N 个连接，再挨个发一条消息，检查能不能收到原样的回显。
# 用法：python3 test_clients.py 名字 连接数，例如 python3 test_clients.py epoll 500
import socket
import sys

name = sys.argv[1]       # 只是打印时用的名字，比如 blocking 或 epoll
count = int(sys.argv[2])  # 要建立多少个连接

# 第一步：一口气建立 count 个连接，都先不发数据，模拟“很多人连着但不说话”
conns = []
for i in range(count):
    s = socket.create_connection(("127.0.0.1", 8888))
    s.settimeout(1)  # recv 最多等 1 秒，等不到就算失败
    conns.append(s)

# 第二步：挨个发一条不同的消息，看能不能收到一模一样的回显
ok = 0
for i, s in enumerate(conns):
    msg = f"hi{i}".encode()
    s.sendall(msg)
    try:
        if s.recv(100) == msg:
            ok += 1
    except socket.timeout:
        pass  # 1 秒内没收到回显

print(name, "echo ok:", ok, "/", count)
