私はC#を初めて使用し、過去にほとんどWebベースのコーディングを行ってきました。単一のクライアントと通信するTCPサーバーを作成しています。プログラムが接続の待機(またはデータの読み取り、送信など)をブロックしたくないので、複数のスレッドが必要であることを知っています。
これまで、GUIとクライアントとの通信用のクラスを備えた簡単なテストアプリケーションを作成しました。メインGUIクラスは、通信クラスのインスタンスを作成します。BackgroundWorkerにsocket.accept呼び出しがあり、接続されたソケットをRunWorkerCompletedEventArgs.Resultの通信クラスに戻そうとしています。これは機能していません。DoWorkメソッドに割り込んで、ソケットが接続されていることを確認できます。次に、DoWorkEventArgs.Resultを接続されたソケットに設定し、それを通信クラスに戻そうとします。RunWorkerCompletedメソッドでは、ソケットは接続されていません。
単一のクライアントにTCPサーバーを実装する方法について間違った考えを持っている可能性があります。私が見たすべての例は複数のクライアント向けに設計されていますが、私は単一のクライアントを扱います。私はクライアントを制御できず、単にクライアントと通信しようとしています。
接続されたソケットをBackgroundWorkerからメインクラスに戻すにはどうすればよいですか、またはコードを構造化するためのより良い方法が必要です。
アップデート:
私はクライアントを管理していません。これは組み込みLinuxデバイスです。プロトコルは非常に単純です。サイズヘッダーとそれに続くデータバイト。
ターゲットは.NET2.0です。WCFは.NET3.0以降でのみ使用できるようです。
アップデート:
私のコードは、クライアントにコマンドを送信し、データを受信します。私のコードは、データを継続的に送受信する必要がある長時間実行されるアプリケーションになります。