0

TCP ソケットを使用してイーサネット経由で PC に接続する組み込みシステムを開発しています。PC が TCP クライアントになり、組み込みシステムがサーバーになります。私の理解が正しければ、古典的な通信モデルは、クライアントが何らかのデータをサーバーに送信し、サーバーが毎回応答するというものです。サーバーが通信を開始することはありません。

私がやりたいことは、対応する応答なしで、PC から組み込みシステムにコマンドを送信することです。組み込みシステムは、コマンドで記述されたタスクを実行します。組み込みシステムにエラーがある場合、または報告するステータス メッセージがある場合、PC によってポーリングされることなく、これらを送り返します。

PC側での受信以外はすべて把握しました。C#.net で PC アプリをプログラミングしています。データがソケットで受信されるたびに起動するコールバックを設定できますか? 私が見たすべての例では、ブロッキング方式で receive メソッドを使用しています。

4

2 に答える 2

0

ソケット ストリームで非同期 I/O を使用できます。これはまさにあなたが求めているものです - 受信操作を開始し、受信が完了したときに呼び出すコールバックを与えます。

BeginReceive/EndReceive 関数を確認してください。

詳細はこちら: http://msdn.microsoft.com/en-us/library/bbx2eya8.aspx

于 2012-08-24T14:47:50.813 に答える
0

もちろん、一長一短はあります。

やりたいことは、接続するクライアントごとに新しいスレッドを起動し、イベント/コマンド スレッドでイベントを発生させることです。パケットを受信したときに ACK を送信する (オペレーティング システムの TCP/IP スタックによって処理される) 以外の要求に応答する義務はありません (OS がこれを行うこの部分について心配する必要はありません。 TCP/IP の信頼性を高める要素の一部)。

ソケットがアクティブである限り、クライアントに応答を返すことができるはずなので、基本的には、コマンドが実行されている限りソケットをアクティブにしておく必要があります。

これを行う方法を示す Microsoft の例のリストを次に示します。http://msdn.microsoft.com/en-us/library/bew39x2a.aspx#Y0

于 2012-08-24T14:49:36.610 に答える