如何在 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")
...
好的,我有一个套接字,我一次处理一行并记录它。下面的代码对此非常有用。 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")
...