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

标签 python sockets logging exception 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.

我遇到了一个问题,当服务器断开我的连接时,突然我有一个巨大的文件,里面充满了“接收:”一词。我知道这是因为当 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/

相关文章:

Java logback 嵌套变量替换

java - 如果我不从 MDC 中删除上下文数据会怎样?

postgresql - 无法使 log_min_duration_statement 起作用

python - (python) 文档字符串导致缩进错误

java - 无法将数据从 Java 客户端发送到 Python 服务器

c++ - 使用 Qt 的 TCP 双向通信

java - 发送图像文件时如何修复 NetworkOnMainThreadException

python - Python 中的 OpenCV grabcut() 背景颜色和轮廓

python - 如何在Python中将数组中的值替换为列表中的值?

python - 在 python 脚本中使用 Pywin32 和 outlook 发送自动电子邮件是有效的,但是当通过 Windows 任务计划程序自动发送电子邮件时不起作用