我是套接字编程的新手,目前正在尝试使用Python学习它
目前,当接收应用程序知道发送应用程序何时完成发送数据时,我感到困惑。
例如,在Python中,使用
从TCP套接字读取socket.recv(bufsize [, flags])
返回接收数据的bytearray。如果有更多数据(例如在缓冲区中),我们只需再次调用此方法。我目前的模式是这样的。
while True:
buffer = socket.recv(1024)
file.write(buffer)
但是,如何知道对等体何时停止发送数据并退出循环?因为如果此方法返回0字节,则有两种可能性:
缓冲区为空,对等方仍在发送数据
缓冲区为空,对等方已关闭
我的问题是,接收应用程序如何区分方案1和2
答案 0 :(得分:0)
缓冲区才会返回空数组。
如果客户端什么都不发送,因为TCP调用在你的情况下是阻塞的,程序会在recv
上永远被阻塞,直到数据到达或连接关闭(在这种情况下数据到空)。
(当你在磁盘上读取文件时也是如此:你读取数据直到数据返回空字符串/字节数组:然后你知道你到达了文件的末尾)