好吧,我有一个套接字,我一次处理一行并记录它。下面的代码对此非常有用。我用 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.
我遇到了一个问题,当服务器断开我的连接时,突然我有一个巨大的文件,里面充满了“接收:”一词。我知道这是因为当 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")
...
关于python - 如何在python中检测断开连接,而不发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29111750/