[Python] Python と C# の間で受け渡されるメッセージ

Python と C# でのメッセージング

最近、友達といくつかの小さなプロジェクトに取り組んでいたとき、サーバーとして Python、クライアントとして C# を組み合わせて作成することができました。誰もが才能を発揮し、方法はたくさんあります  ̄| ̄|

Jsonを中間ファイルとして使用する

2 つの異なる言語間の通信には統一されたデータ交換形式が必要であり、間違いなく Json が第一選択です。
料理の本格さゆえに、相手の言語をどう変換するか戸惑うばかりですが、Json変換の比較表は以下の通りです。

パイソン ジソン C#
辞書 物体 クラス
リスト、タプル 配列 リスト
str、ユニコード
int、long、float 番号 int、long、float
真実 真実 真実
間違い 間違い 間違い
なし ヌル ヌル

これは双方の統一メッセージフォーマットにのみ対応しており、中間ファイルとしてJsonを簡単に実装できます。

C# の場合は、Newtonsoft.Json (または Json 公式 Web サイトからダウンロードできる、Json 操作を実行できる他のパッケージ) を導入する必要があります。Newtonsoft.Json を例として挙げます。主に使用されるのは次のとおりです。

関数 意味
JsonConvert.SerializeObject(オブジェクト値) クラスを Json 文字列にシリアル化します。
JsonConvert.DeserializeObject<T>(文字列値) Json 文字列を指定されたクラスに逆シリアル化します。

Python の場合、JSON 関数を使用するには、json ライブラリをインポートする必要があります: import json。

関数 意味
json.ダンプ Python オブジェクトを JSON 文字列にエンコードする
json.loads エンコードされた JSON 文字列を Python オブジェクトにデコードします

ビッグエンディアンとリトルエンディアンの問題

本来、この問題は原理的には発生しませんでしたが、Socket を使用しているため、下請けやパケットの貼り付けを処理するときに、いくつかの素晴らしい操作により、この問題を記録し、重要な部分を投稿する必要がありました。

C# クライアント:
ここに画像の説明を挿入

Python サーバー:
ここに画像の説明を挿入
ここでは、サブパッケージとスティッキー パケットを処理する最も簡単な方法、つまり長さとメッセージの内容を使用します。実行時の結果は常に間違っています。サーバーは何も受信していないようです。デバッグを繰り返した結果、長さの解析に問題があることがわかりました。

C# BitConverter.GetBytes メソッドによって送信されるデータは次のとおりです:
11 0 0 0 (サイズ: 11)

Python ヘッドのデータは次のとおりです:
b'\x0b\x00\x00\x00' (サイズ: 184549376)

C# がリトル エンディアンでデータを処理しているのに対し、Python はビッグ エンディアンでデータを処理していることは明らかです。これはすべて、自信に満ちた感嘆符から生じています。ᕙ༼ ͝°依° ༽ᕗ

公式ドキュメントより
=世界平和に変わります( ̄▽ ̄)~*


強度は低いですがご了承ください(*・ω-q)

おすすめ

転載: blog.csdn.net/zigzagbomb/article/details/101212111