# 测试“写不完”：先发 20 MB 数据，故意晚 1 秒才开始读回显，看最后收回来的是否完整
import socket
import threading
import time

SIZE = 20 * 1024 * 1024
data = bytes(i % 251 for i in range(SIZE))  # 有规律的内容，方便比对

s = socket.create_connection(("127.0.0.1", 8888))

def sender():
    s.sendall(data)

t = threading.Thread(target=sender)
t.start()
time.sleep(1)  # 这 1 秒里只发不收：服务器写回来的数据会把我们的接收缓冲区塞满

received = bytearray()
s.settimeout(2)
try:
    while len(received) < SIZE:
        chunk = s.recv(1 << 20)
        if not chunk:
            break
        received += chunk
except socket.timeout:
    pass
t.join(timeout=1)
print("sent", SIZE, "bytes, got back", len(received), "bytes,",
      "OK" if bytes(received) == data else "DATA LOST")
