我找到了这个Python代码here。
我不明白第18行的if not data: break
是什么意思。
#!/usr/bin/env python
import socket
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 20
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connection address:', addr
while 1:
data = conn.recv(BUFFER_SIZE)
if not data: break
print "received data:", data
conn.send(data) # echo
conn.close()
答案 0 :(得分:4)
它只是检查收到的data
是否为空,如果是,则它会突然退出循环。就像检查空字符串一样。
>>> not ""
True
>>> bool("")
False
如果data = conn.recv(BUFFER_SIZE)
给出一个空字符串,则while
循环终止。
答案 1 :(得分:0)
这意味着如果最近接收连接数据的尝试没有返回任何数据,则跳出尝试接收更多数据的循环。
见
while 1:
while block
是一个while循环,其条件始终求值为true。因此,这是一个无限循环,它将在每次迭代时评估while block
。
除了我们的情况,while block
中有break
。如果break
被击中,它将突破循环。让我们看一下while block
:
data = conn.recv(BUFFER_SIZE)
if not data:
break
print "received data:", data
conn.send(data) # echo
此块表示接收最多conn
个字节的连接BUFFER_SIZE
上的数据。如果没有收到数据,not data
计算结果为true,我们执行if
正文。在这种情况下,它是我们一直在讨论的break
语句,因此我们突破循环并停止接收数据。如果if
条件的计算结果为false,则会将接收到的数据后面的消息"received data:"
打印到控制台。最后,数据回显到另一个端点。
答案 2 :(得分:0)
这意味着如果数据为空,为null或等效,则while循环将终止。