0

私はC#でクライアントを作成しましたが、LinuxでCでサーバーを構築したいと思います。

すべての「メッセージ」に「メッセージ」の長さのプレフィックスを使用します。(4バイト配列)byte[]を使用して配列にエンコードします。BitConverter.GetBytes()その後、私はそれを送信します

socket.Send(prefix, prefix.Length, 0);

Linux上のCサーバーは番号を読み取ることができません。4バイトを読み取ったにもかかわらず、奇妙な文字が表示されます。

Linux側は次のようになります

char prefix[4];
int bytes = 0;
bytes = recv(s, prefix, 4, 0);
printf("%s", prefix);

を使用して数値をエンコードするとEncoding.UTF8.GetBytes()、Linuxはそれを正しく理解します。

私はそれをテストしました、そして問題はプログラムがこれらの2つの異なる言語でコード化されているときだけであるように見えます。

どうしたの?

4

1 に答える 1

1
  • BitConverter.GetBytes()バイナリ表現が得られます。ほとんどの場合、印刷可能な文字ではありませんが(int 0x20202020を試してください。これにより、1つ以上のスペースが得られます)、目的の処理には最適です。あなたはそれを次のようなもので印刷することができますprintf("%d",the_int_variable)

  • Encoding.UTF8.GetBytes()文字列表現が得られます。これは、コンソールに出力するには便利ですが、処理には最適ではありません。

編集

更新された質問の後、プレフィックスをintに変更printf("%s", prefix);した後にに変更し、再試行します。printf("%d", prefix);

于 2012-04-12T13:20:23.653 に答える