gpt4 book ai didi

如果服务器关闭连接,Python 客户端会断开连接

转载 作者:行者123 更新时间:2023-11-30 23:18:02 26 4
gpt4 key购买 nike

我有 python 中的服务器和客户端代码,其中客户端向服务器发送请求消息并等待响应。我有服务器代码来在客户端未发送正确的请求时关闭连接。当服务器关闭请求时,客户端仍然会永远监听响应。

下面是代码

服务器.py

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host, port))

s.listen(1)

while True:

c, addr = s.accept()

# Receive request
data = c.recv(1024)
if data != 'something'
c.close()
else
c.sendall("message"+"End")
c.close()
s.close()

客户端.py

End='End'
def recv_end(the_socket):
# Snippet from http://code.activestate.com/recipes/408859-socketrecv-three-ways-to-turn-it-into-recvall/
total_data=[];data=''
while True:
data=the_socket.recv(8192)
if End in data:
total_data.append(data[:data.find(End)])
break
total_data.append(data)
if len(total_data)>1:
#check if end_of_data was split
last_pair=total_data[-2]+total_data[-1]
if End in last_pair:
total_data[-2]=last_pair[:last_pair.find(End)]
total_data.pop()
break
return ''.join(total_data)

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host, port))

s.send("some_request")
data = s.recv_end(1024)
print "<---- " + str(data)

s.close()

我是Python新手,想知道是否有办法让客户端知道服务器关闭了连接并终止。

据我了解,如果我使用普通的 s.recv(1024),客户端会断开连接。但就我而言,我需要向客户端发送大数据,因此我使用了从 http://code.activestate.com/recipes/408859-socketrecv-three-ways-to-turn-it-into-recvall/ 中找到的不同函数。 。

服务器是否在连接关闭期间发送一个空字符串回复,在我的情况下,它会发送一个没有结束限制器的空字符串,因此客户端会永远监听?

最佳答案

当您有一个带有 recv 的循环或任何从套接字或管道读取的内容时,您应该在获得 len 0 的缓冲区后立即停止读取:

while True:
data=the_socket.recv(8192)
if len(data) == 0: break
...

关于如果服务器关闭连接,Python 客户端会断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26995145/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com