2

socket-module 経由でデバイスからデータを受信します。しかし、しばらくすると、デバイスはパッケージの送信を停止します。次に、for ループを中断します。True は 100 を超えるパッケージを受け取るため、機能しません。このプロセスを停止するにはどうすればよいですか? s はソケットを表します。

...
for i in range(packages100):
    data = s.recv(4)
    f.write(data)
...

編集: socket.settimeout() はソリューションの一部だと思います。参照: Python のソケット recv メソッドでタイムアウトを設定するには?

4

2 に答える 2

3

接続を閉じるのではなく、ピアが実際にデータの送信を停止する場合、これは注意が必要であり、このソケットからの非同期読み取りに頼らざるを得なくなります。

それを非同期モードにして (ドキュメントと Google はあなたの友達です)、読み取りをブロックするのではなく、毎回読み取るようにしてください。その後、いつでも「試行」を停止できます。recv非同期 IO の性質上、コードは少し異なることに注意してください。一度戻ると、実際にデータを読み取るとは想定できなくなります。

于 2011-05-11T12:21:50.570 に答える
2
while 1:
    data = conn.recv(4)
    if not data: break
    f.write(data)

また、python docs の例

于 2011-05-11T12:11:44.270 に答える