1

Pythonが送信されているパケットを区別できる方法はありますか? 例えば

Pythonはデータを受け取ります

データを処理する

クライアントが最初のパケットを送信

クライアントが 2 番目のパケットを送信する

Python はデータを受信します。バッファ内のすべての情報ではなく、最初のパケットを受信できますか

私はそれを設定できるので、私が確認したデータを送信し、クライアントはそれ以上のデータを送信しません。最後のピースを処理したことを確認しましたが、私はむしろそうしません

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(("", 2000))
sock.listen(5)

関連するすべてのソケット データ

4

3 に答える 3

1

基本的に 2 つのアプローチがあります。

  1. 各パケットの開始時に、そのパケットの長さを指定する整数を送信します。データを受信したら、最初に整数を読み取り、次に最初のパケットとしてさらに多くのバイトを読み取ります。

  2. パケット間にある種の特別なマーカーを送信します。これは、マーカーがパケット内で発生しないことを保証できる場合にのみ機能します。

S. Lott が指摘しているように、代わりに TCP (ストリームベース) の代わりに UDP (パケットベース) を使用できますが、TCP が提供する他の機能 (ドロップされたパケットの再送信、順次パケット、および輻輳制御)。再送信用に独自のコードを作成するのはそれほど難しくありませんが、輻輳制御を正しく行うのは困難です。

于 2010-10-12T15:30:14.917 に答える
0

Pythonが送信されているパケットを区別する方法はありますか?

はい。TCPの代わりにUDPを使用してください。

于 2010-10-12T15:04:32.460 に答える
0

Netstring は、データ パケットの送信に使用される単純なシリアル化形式です。各データ パケットの形式は「長さ:データ」です。 http://en.wikipedia.org/wiki/Netstring

twisted のような Python ネットワーキング フレームワークは、netstring を直接サポートしています。

于 2010-10-12T16:56:54.850 に答える