如何在 python 中检测断开连接而不发送数据

How to detect disconnection in python, without sending data

好的,我有一个套接字,我一次处理一行并记录它。下面的代码对此非常有用。 cout 函数是我用来向日志发送数据的函数。我使用的 for 循环一次可以处理一行。

socket.connect((host, port))
readbuffer = ""
while True:
    readbuffer = readbuffer+socket.recv(4096).decode("UTF-8")
    cout("RECEIVING: " + readbuffer) #Logs the buffer
    temp = str.split(readbuffer, "\n")
    readbuffer=temp.pop( )
    for line in temp:
        #Handle one line at a time.

我 运行 遇到了一个问题,当服务器断开我的连接时,我突然有了一个充满单词 "RECEIVING: " 的大文件。我知道这是因为当 python 套接字断开连接时,套接字开始不断接收空白数据。

我试过插入:

if "" == readbuffer:
    print("It disconnected!")
    break

所做的只是立即中断循环,并说它已断开连接,即使连接成功也是如此。

我也知道我可以通过发送数据来检测断开连接,但我不能这样做,因为我发送的任何内容都会广播到服务器上的所有其他客户端,这是为了调试这些客户端所以我会干扰。

我该怎么办。先谢谢你了。

您需要将recv()的结果单独检查到readbuffer

while True:
  c = socket.recv(4096)
  if c == '': break # no more data
  readbuffer = readbuffer + c.decode("UTF-8")
  ...