1

asyncoreを使用して、「length:message」タイプのプロトコルを使用してリモートサーバーと通信します。誰かがソケットから正確なバイト数を読み取る方法を私に勧めてもらえますか?handle_readを使用して内部バッファーを埋め、毎回関数を呼び出してバッファーのサイズをチェックしようとしましたが、見た目が醜いです(バッファーが長さを読み取るのに十分な長さであるかどうかを確認し、バッファーの長さがメッセージの長さよりも大きいかどうかを確認し、読み取りますメッセージなど...)。バッファが十分にいっぱいになり、値を返すまでスリープする「socket.read(bytes)」のようなものを持つことは可能ですか?

4

1 に答える 1

1

いいえ。スリープすると、非同期IOの目的全体が無効になります。

ただし、これはtwistedを使用すると非常に簡単に実行できます。

from twisted.protocols.basic import Int32StringReceiver

class YourProtocol(Int32StringReceiver):
    def connectionMade(self):
        self.sendString('This string will automatically have its length '
            'prepended before it\'s sent over the wire!')

    def stringReceived(self, string):
        print ('Received %r, which came in with a prefixed length, but which '
            'has been stripped off for convenience.' % (string,))
于 2010-08-14T20:57:59.773 に答える