2017-07-22 10 views
1

私はPythonにいくつかの問題に直面しています。 socket.recv(1024)で送信したデータを読み取ろうとしますが、データが1024バイトよりも非常に長い場合があります。私はこのコードを試してみます:socket.recv()で完全に送信されたデータを取得するには?

data = b'' 
received = s.recv(1024) 
    while len(received) > 0: 
     data = data + received 
     received = s.recv(1024) 

しかし、whileループコード無限。どのように私はそれを修正するには?ここで

+2

- あなたが期待すべきか見ているソイユーを。データがある閾値よりも長いときは常にループから抜け出すことができますが、受け取ったデータを追加するためにデータから使用されていないものはすべて忘れないようにしてください。 – barny

+0

受信中に試してみてください!= nullまたは受信しました!= '' ' –

答えて

2

は、この(未テスト)を扱う可能性がある方法は次のとおりです。ソケットSの他端は、バッファを埋めるために継続的に十分に送信する場合にのみ発生する可能性が

MINIMUM_PACKET_LENGTH = 100 
data = b'' 
while True: 
    try: 
     received = s.recv(1024) 
    except: 
     # you might put code here to handle the exception, 
     # but otherwise: 
     raise 
    data = data + received 
    while len(data) >= MINIMUM_PACKET_LENGTH: 
     # consume a packet from the data buffer, but leave unused bytes in data 
     packet = data[0:MINIMUM_PACKET_LENGTH] 
     data = data[MINIMUM_PACKET_LENGTH:] 
     # process packet (you could maybe use 'yield packet') 
     # .... 
関連する問題