使用 Python 进行套接字。一旦没有收到客户端的任何连接,如何停止 s.accept() ?

问题描述 投票:0回答:1

这是我的客户端,它基本上向服务器发送 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)

python python-3.x
1个回答
0
投票

您可以添加一条不属于常用数据的特殊的众所周知的消息,例如,

"\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"]
© www.soinside.com 2019 - 2024. All rights reserved.