Context
在写一个Socket I/O模块,功能要求如下:
作为服务端,需要永远循环等待连接
建立TCP连接后可以收发数据
收发数据相互独立,不能阻塞
Trouble
代码如下
def run_server(send_queue, receive_queue):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print(f"[server] Connecting with {addr}")
with conn:
while True:
try:
m = send_queue.get(block=False)
except queue.Empty as e:
m = None
if m:
print(isinstance(m, AbstractMessage))
if isinstance(m, AbstractMessage):
send_bytes = message2bytes(m)
conn.sendall(send_bytes)
print(f"Send message is {type(m)} : {send_bytes}")
try:
data = conn.recv(4096)
except BlockingIOError as e:
data = Non