这是我的客户端,它基本上向服务器发送 3 条随机消息,它打开和关闭连接并再次重新打开,直到完成列表中的元素(我想要这样)
import socket
HOST='localhost'
PORT=8080
x=[b'hi', b'hello', b'bye']
if __name__='__main__':
for i in x:
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST,PORT))
s.sendall(i)
r=s.recv(1024)
s.close()
这是我的服务器,它接收来自客户端的消息,打印它们并向客户端发送反馈
import socket
import time
HOST='127.0.0.1'
PORT=8080
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))
s.listen()
while True:
conn,addr=s.accept()
data=conn.recv(1024)
print(data)
conn.sendall(b'ok')
time.sleep(1)
服务器不知道客户端将发送多少消息,一旦客户端不再发送更多消息,服务器就不会停止,因为它正在等待客户端的连接。我很难处理这个问题。
我尝试使用
select
但它不起作用,即使使用 conn.setblocking(0)
也是如此。我对 threads
不熟悉,所以我试图避免使用它们来解决问题。
我正在 Linux 上工作,我使用命令 python3 来运行 2 个文件(client.py 和 server.py)
您可以添加一条不属于常用数据的特殊的众所周知的消息,例如,
"\x00\x00END\x00\x00"
,当服务器收到它时,它会退出while True
循环:
while True:
...
data = conn.recv(1024)
if data == b"\x00\x00END\x00\x00":
break
x = [b"hi", b"hello", b"bye", b"\x00\x00END\x00\x00"]