none
【C#】ソケット通信において、データに誤りが起きる RRS feed

  • 質問

  • C#で、ソケット通信プログラムを作成しました。

    ①クライアントからサーバーへバイト配列を送信する

    ②サーバーでバイト配列を受け取る

    ③サーバーからクライアントへ、受け取ったバイト配列を送り返す

    といったプログラムを作成しました。

    この後、①での送信データ、③での受信データをそれぞれ16進数に変換して表示したところ、なぜか受信データは送信データよりも3バイト多く出力されました。

    このような、まったく同じデータを送受信した際にデータの不整合(?)が起きる要因として、どのような事象が考えられるのでしょうか?

    諸事情でソースコードを張り付けることができません。すいません。

    追伸 バイト配列は、クライアント、サーバー共に164Byte固定で宣言しました。

    • 編集済み chmod_777 2018年9月13日 5:53
    2018年9月13日 5:52

回答

すべての返信

  • stream.write, stream.read にどう書きましたか?
    何をもって「受信データは送信データよりも3バイト多い」と判断しましたか。

    Jitta@わんくま同盟

    2018年9月13日 7:29
  • ソースコードはサンプルを参考にしました。

    write、readの書き方は↑と同じ書き方です。

    3バイト多いと分かった理由として、

    送信データのHEX表示は、最終行が00000000012345DE0000000000000000000000で終わっていたのに対し、

    受信データのHEX表示は、最終行が00000000012345DE0000000000000000000000000000で終わっていたためです。


    追伸

    サーバーで、クライアントのデータを受信した時点ですでに3バイト多いようです。

    • 編集済み chmod_777 2018年9月13日 7:49
    2018年9月13日 7:47
  • iPhoneなので数え方が悪いかもしれませんが、受信が44桁しかないように思います。 2桁1バイトなら22バイト、1桁1バイトだと44バイト。 164バイトに全然届いていないと思いますが?
    どぼんさんのサイトでは、文字列を送っています。ここでは164バイトと書かれているので、バイト配列を送っていると思います。表示の終端は、どの様に決めたのでしょうか。
    また、readメソッドの戻り値を足し込んでいくと、幾つになりますか?(これが受信バイト数)

    Jitta@わんくま同盟

    2018年9月13日 8:33
  • 自己解決しました。

    要求仕様と変数定義が異なっているようです。

    • 回答としてマーク chmod_777 2018年9月13日 8:33
    2018年9月13日 8:33
  • ここはあなたのためのサポートセンターではありません。みんなの互助組織です。あなたの問題解決を助ける事は、私に明日起こる問題への解決能力を付けることにつながります。ですので、あなたにしかわからない状態にしないでください。
    writeの第3引数に164を指定したなら164バイト送ります。 readの第3引数に164を指定したなら164バイト以下を読み取ります。 164バイトを超えた理由はなんだったのでしょうか。 「定義変数が異なっている」ことが、どの様に受信数が増えることにつながるのでしょう?

    Jitta@わんくま同盟

    2018年9月15日 2:16