問題タブ [beginread]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asynchronous - TcpClient.BeginRead 非同期コールバックを使用したメソッドの衝突
複数のクライアントを受け入れる TCP ソケット サーバーを作成しようとしています。しかし、ここ数日、特定の障害を克服できていません。問題を TcpClient.BeginRead( callbackMethod ) メソッドにあると切り分けたと思います。
基本的に、個別のクライアントがこのメソッドをアクティブにしますが、コールバックは実際に送信ストリームにデータを送信するまで呼び出されたりトリガーされたりしません。ただし、ストリーム経由で入ってくるバイトに対して実行する encoding.ASCII.Getstring() メソッドは、beginread メソッドが開始された順序に応じて、不要な「0/0/0/」を出力します。なぜこうなった?なんで?助けてください。
順番に状況/シナリオ
イベント 1.) ClientOne Connects は、非同期コールバックで BeginRead をトリガーします (現在、コールバックはデータを待機しています)。
イベント 2.) ClientTwo Connects は、非同期コールバックで BeginRead をトリガーします。(現在、コールバックはデータを待っています)
イベント 3.) ClientOne が最初にメッセージを送信した場合、データは確実に処理されますが、Encoding.ASCII.GetString(3 つの引数) はすべてのバイトに対して「0/」を出力します。ClientTwo の BeginRead が ClientOne の BeginRead に干渉していると思います。
イベント 3. (4 ではない)) ClientTwo が最初にメッセージを送信した場合、データは処理され、Encoding.ASCII.GetString(3 つの引数) を使用して正しくデコード/文字列化されます。
ソースコード