0

これが以前に対処されていた場合は申し訳ありませんが、Python アプリケーション (ソケット) でクライアントとサーバーの間で交換されるデータをどのように整理すればよいですか?

文字列、タプル、辞書など、送信する必要がある要素がいくつかあるとしましょう。

"hello world", (1, 2, 3), {"k": "v"}

私が現在行っていることは、単にすべてを文字列に変換することです-repr()送信前とeval()受信後に呼び出します。これは明らかに少し冗長に思えます。

これらのデータのチャンクをどのように送信すればよいですか? コンベンションはありますか?優先フォーマットは? どうやって圧縮するの?

4

3 に答える 3

1

最も簡単な方法は、クライアント側でピクルし、サーバー側でアンピクルすることです。ただし、unpickle を強制的に任意のコードを実行させることができるため、データが信頼できるソースからのものであることを確認する必要があります。cPickleC言語の実装を取得するために必ず使用してください。

于 2013-08-01T20:30:31.267 に答える
1

信頼できないソースからデータを送信しない eval()ください。つまり、セキュリティeval()で保護されていないネットワーク接続 (または、相手側のエンティティが誰であるか、またはそれが何を言っているのかを完全に確信できない場合) を介して何かを受信して​​はなりません。

ここでの明らかな解決策は、一方の端でデータを JSON としてエンコードし、もう一方の端でデコードすることです (たとえば、msgpackのような高度に圧縮された形式を必要とする特定のパフォーマンス要件がない限り)。

于 2013-08-01T20:31:53.880 に答える