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)