こんばんは事前に申し訳ありませんが、文字列のメッセージを受信するが、エラーがどこにあるか分かりません。一度にたくさんのものを転送したい(配列の内容、数百バイト)。非同期ソケット、</p> <p>私のクライアントアプリケーションが非同期にサーバから受信している...そんなにを書き込むため、
サーバから「コマンド」を送信し、クライアント側の機能がこれらのコマンドに従って動作するようにしたいとします。たとえば、サーバからのメッセージが"print_hello"
の場合、helloを出力する関数を呼び出す必要があります。 。
データを非同期的に受信すると、データがどれだけ送信されたか(または予想以上のデータが送信されたかどうかはわかりません)、すべてのデータを"コマンドの終わり"(例えば、'!'
)符号を受信したときには、その関数を呼び出すことを知る必要があります。
これまでのところ私にとっては意味がありますが、実装には問題があります。私のDataReceivedコールバック関数では、私はこのコードを持っている:
Console.WriteLine("Raw data: {0}", data));
mainBuffer += data;
Console.WriteLine(mainBuffer);
mainBufferは、最初の行が正しく印刷さvolatile static string mainBuffer = "";
として宣言され、そして期待通りのデータのすべてを通過します。しかし、私がmainBuffer
を印刷すると、受信した最初のデータセットのみが出力され、残りはバッファに追加されません。
この原因は何ですか?スレッドの安全性の問題?私はmainBufferの最新の値を読んでいませんか?私はこれをデバッグするためにブレークポイントを使用することはできません。
サンプル出力:
Raw data: ABC
ABC
Raw data: DEF
ABC
RAW data: GHI
ABC
小さな更新は、私もvolatile static int
を使用してみました、そして、それは各DataReceived()
後に正しくインクリメントし、印刷します。文字列はまだ更新されません。
mainBufferはどこで宣言しましたか?あなたはそれを受け取るたびにリセットしないのですか? " – Eiver