5

この Python コードはこちらで見つかりました。

if not data: break18行目の意味がわかりません。

#!/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

これは、データが空、null、または同等の場合、while ループが終了することを意味します。

于 2013-07-27T14:20:53.143 に答える
0

これは、接続でデータを受信しようとした最新の試みがデータを返さなかった場合、さらにデータを受信しようとするループから抜け出すことを意味します。

見る

while 1:
    while block

常に true と評価される条件を持つ 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 datatrue と評価され、if本体を実行します。この場合は、これbreakまで議論してきたステートメントであるため、ループから抜け出し、データの受信を停止します。if条件が false と評価された場合、メッセージ"received data:"に続いて受信したデータがコンソールに出力されます。最後に、データは他のエンドポイントにエコー バックされます。

于 2013-07-27T14:20:35.673 に答える