3

私は 2 つのアプリケーションを持っています。1 つはクライアントで、もう 1 つはサーバーです。サーバーはクライアントをサブスレッドとして起動します。次に、クライアントは標準出力を介してコマンドを出力します。サーバーはコマンドを待機し、それに応じて応答します。

基本的に標準出力経由のクライアントサーバー。

例えば:

client >> Move north
Server >> Your new location is {2,3} 
client >> Move north
Server >> Your new location is {2,2} 
client >> Shoot east 
Server >> Projectile 66638 heading east {3,2}

問題は、2 つのアプリケーションを接続する方法がわからないため、サーバーとクライアント アプリケーションへの読み取りと応答です。

コマンドラインを通信レイヤーとして使用したい理由は、クライアントの作成をできるだけ簡単に保ちたいからです。

また、一度に複数のクライアントが存在する場合もあります。クライアントは、相互に依存してサーバーと通信できる必要があります。(彼らはお互いの通信を見ることができないはずです)

現在、 CreateProcess () 関数を使用してアプリケーションを起動しています。この機能により、アプリケーションの初期コマンド ライン パラメータを簡単に設定できます。その後のコミュニケーションだけではありません。

私の質問は:

  • クライアント アプリケーションをスレッドとして起動するサーバー アプリケーションは、クライアントの標準出力をどのように読み書きしますか?
4

1 に答える 1

0

上記のコメンターが指摘しているように、名前付きパイプ (またはソケット) は、この種のソリューションの方法であり、スレッドではなく、おそらく必要な 2 つの別個のプロセスです。

Windows では、TransactNamedPipe()システム コールは目的を達成するのに役立ちます。これは、コマンドをサーバーに送信して応答を待機するのに理想的であり、サーバーへの (同期) リモート プロシージャ コールと非常によく似た処理を実行するクライアントを簡単に作成できます。

于 2012-11-05T19:40:59.157 に答える