结束Python TCP连接

时间:2016-09-03 10:05:02

标签: python sockets networking tcp

我是套接字编程的新手,目前正在尝试使用Python学习它

目前,当接收应用程序知道发送应用程序何时完成发送数据时,我感到困惑。

例如,在Python中,使用

从TCP套接字读取
socket.recv(bufsize [, flags])

返回接收数据的bytearray。如果有更多数据(例如在缓冲区中),我们只需再次调用此方法。我目前的模式是这样的。

while True: 
    buffer = socket.recv(1024)
    file.write(buffer)

但是,如何知道对等体何时停止发送数据并退出循环?因为如果此方法返回0字节,则有两种可能性:

  1. 缓冲区为空,对等方仍在发送数据

  2. 缓冲区为空,对等方已关闭

  3. 我的问题是,接收应用程序如何区分方案1和2

1 个答案:

答案 0 :(得分:0)

仅当客户端关闭连接时,

缓冲区才会返回空数组。

如果客户端什么都不发送,因为TCP调用在你的情况下是阻塞的,程序会在recv上永远被阻塞,直到数据到达或连接关闭(在这种情况下数据到空)。

(当你在磁盘上读取文件时也是如此:你读取数据直到数据返回空字符串/字节数组:然后你知道你到达了文件的末尾)