如何在不发送数据的情况下检测python中的断开连接

时间:2015-03-17 23:44:17

标签: python sockets logging exception-handling disconnect

好的,我有一个套接字,我一次处理一行并记录它。下面的代码很适合。 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.

我遇到了一个问题,当服务器断开我的时候,我突然间有一个大量的文件,其中包含了#34; RECEIVING:"。我知道这是因为当python套接字断开连接时套接字开始不断地接收空白数据。

我试过插入:

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

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

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

我该怎么办?先谢谢你。

1 个答案:

答案 0 :(得分:2)

您需要分别检查recv()与readbuffer

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