1

私は次の設定をしています:

  • 2 台の Ubuntu マシン (サーバーとクライアント)
  • 「サーバー」でこれを実行して、受信したすべてのデータを送信者(クライアント)にエコーバックします:

    ncat -e /bin/cat -v -l 12345
    
  • クライアントには、リモートソケットに接続するだけの単純なアプリケーションがあります: socket() -> setsockopt() -> connect()

だから...私の質問は、クライアントアプリケーションからソケットにすでに接続されている他のアプリケーションがあるかどうかを確認することは可能ですか? ある時点でソケットに接続するプロセスは 1 つだけにして、これをクライアント アプリケーションから確認したいと考えています。これは可能ですか?3時間グーグルした後、関連するものは何も見つかりませんでした:(

(申し訳ありませんが、ネットワーク プログラミングの経験はありません)

4

3 に答える 3

2

いいえ、クライアントはサーバーに接続している他のクライアントの数を確認できません。

この情報を取得できるようにするには、アプリケーション固有のプロトコルをクライアントとサーバーで使用する必要があります。

いずれにせよ、この特別なケースが 1 つあります。クライアントが、最大 N クライアントがサーバーに接続できることを認識しており、自身の接続試行が拒否された場合、N クライアントが既にサーバーに接続されていると見なすことができます。


ncat並列接続ハンドルの最大数を設定するには、オプション-m/を使用します--max-conns。逐語的な形式man ncat:

-m numconns, --max-conns numconns (最大接続数を指定) . Ncat インスタンスで受け入れられる同時接続の最大数。100 がデフォルトです。

于 2013-01-07T18:29:00.600 に答える
1

走る:

netstat -an | grep <your server port port number> 

クライアント マシンで、既存の TCP 接続を確認します。

于 2013-01-07T14:44:04.393 に答える
0

1 つのクライアントを受け入れた後、サーバーのリッスン ソケットを閉じることはできませんか? リッスン ソケットがない場合、クライアントは接続できなくなります。1 つのクライアントを削除したら、リッスンしているソケットを再び開いて、別のクライアントの準備を整えることができます。そうすれば、クライアントは、サーバーがビジー状態の場合に接続に「失敗」したことを確認できます。それ以外の場合は、正常に接続できます。

このアプローチの欠点は、クライアントが接続できない理由を正確に判断できないことです。クライアントがビジーである (クライアントが 1 つしかない) か、他の問題が原因である可能性があります。これは問題ですか?

于 2013-01-07T14:43:03.387 に答える