1

改行を使用して\n不明な長さのメッセージを区切る TCP アプリケーションを構築しています (ただし、通常は < 64 バイト)。この記事は非常に役立つと 思います。

一度に1文字に最適な(つまり、最も効率的/最速の)アプローチrecvであり、改行またはrecv大きなバッファであるかどうかを確認し、「残り物」をクラスに保存しますか?

一つずつ

def __recv_until_newline(self):
    message = ""
    while True:
        chunk = self.socket.recv(1)
        if chunk == "" or chunk == "\n":
            break
        message += chunk
    return message

バッファを維持する

def __recv_until_newline(self):
    """ self.__buffer holds previously received message parts"""
    message = self.__buffer
    while True:
        chunk = self.socket.recv(64)
        message += chunk
        if chunk == "" or "\n" in message:
            break

    # something a bit more intelligent than this in reality, but you get the idea
    messages = message.split('\n')
    self.__buffer = "".join([x for x in message[1:]])
    return messages[0]
4

1 に答える 1