5

我在这里找到了这个 Python 代码。

我不明白if not data: break第 18 行是什么意思。

#!/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()
4

4 回答 4

4

它只是检查data接收到的是否为空,如果是,则跳出循环。很像检查空字符串。

>>> not ""
True
>>> bool("")
False

如果data = conn.recv(BUFFER_SIZE)给出一个空字符串,则while循环终止。

于 2013-07-27T14:20:20.060 回答
0

这意味着如果最近在连接上接收数据的尝试没有返回数据,则跳出尝试接收更多数据的循环。

while 1:
    while block

是一个 while 循环,其条件始终为真。因此,这是一个无限循环,将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评估为真,我们执行if正文。在这种情况下,这是break我们一直在讨论的语句,因此我们跳出循环并停止接收数据。如果if条件评估为假,则将"received data:"接收到的数据后面的消息打印到控制台。最后,数据被回显到另一个端点。

于 2013-07-27T14:20:35.673 回答
0

这意味着如果数据为空、null 或等效,while 循环将终止。

于 2013-07-27T14:20:53.143 回答
0

这是永久读取客户端请求的 tpc 套接字代码。因此,如果客户端断开连接或客户端服务器管道中断,则代码conn.recv(BUFFER_SIZE)返回 -1,因此在这种情况下if not data变为真,然后它将中断 while 循环并停止列出客户端请求。希望你现在清楚了。

于 2021-11-11T07:49:13.253 回答