5

同じポートへの複数の接続を受け入れる必要があります。私はC++でソケットを使用していますが、SSHのようなことをしたいと思っています。ssh user @ machine "ls -lathrR /"を実行して、最初のコマンドがまだ実行されている場合でも、同じマシンに対して別のコマンドを実行できます。

どうやってやるの?

ありがとう。

4

3 に答える 3

10

必要なのはマルチスレッドソケットサーバーです。

このためには、リッスンするためにソケットを開く(そして着信クライアント接続を待つ)メインスレッドが必要です。これは、ある種のwhileループに入る必要があります。

次に、クライアントがそれに接続すると、accept()関数はブロックを解除し、その時点で、それを処理するスレッドに要求を渡すことによって、クライアント要求を処理する必要があります。

サーバー側はループバックし、前のスレッドがタスクを実行している間、別の接続を待ちます。

必要に応じてスレッドを作成するか、より効率的なスレッドプールを使用できます(新しいスレッドの初期化にかかる時間を節約できます)。

詳細については、こちらをご覧ください。bind()Web上で、具体的にlisten()accept()サーバー側からマルチスレッドサーバーソケットを探します。

于 2012-05-23T16:10:31.703 に答える
1

あなたはとを読む必要があり::listen()ます::accept()

前者は、リスニング用のソケットをセットアップします。::accept()次に、新しい接続が到着するたびに戻るループを使用するループ(おそらく独自のスレッド内)が必要です。

次に、そのループは、受信したファイル記述子を渡す新しいスレッドを生成し、::accept()そこからそのソケット上のすべてのI/Oを処理する必要があります。

于 2012-05-23T15:53:04.867 に答える
0

古い質問は古いですが、OPの質問を理解した人は誰もいないと思います。

あなたはsshがどのように機能するかを誤解しています。sshを介してサーバーに複数のコマンド/複数の接続を送信する場合、実際には、接続しているサーバー上に、これらすべてのコマンドを受信して​​いるプログラムは1つだけです。

Sshd(sshデーモン)はサーバー上で実行され、マルチスレッドソケットサーバーです(fduffの回答を参照)。これは、ポート22でリッスンし、すべての着信ssh接続を単独で処理する唯一のプログラムです。

于 2013-05-03T14:31:54.113 に答える