2011-08-08 17 views
1

Cで書かれたクライアントサーバーアプリケーションがありますソケット接続Windows

サーバーは指定されたポートで待機します。クライアントはこのサーバーにデータをプッシュし、残りのクライアントはこのデータをプルします。同様に、すべてのクライアントがこのサーバーを使用します。

私が知りたかったのは、データ損失のない状態で、データの信頼性の高い通信を可能にするソケットの接続数に上限はありますか?サーバーに伝達されてクライアントに中継されるデータの典型的なサイズは約40 kbpsです。

このようなソリューションを設計する際にすべてのパラメータを考慮する必要があることを理解していただけますか?

答えて

0

アップストリームの帯域幅が最大のボトルネックになります。 "40 kbps"であれば、1秒あたりのキロバイト数ではなく、1秒あたりのキロビット数を意味します.5 KB/sです。アップストリームの帯域幅が毎秒1メガビット(128キロバイト/秒)であれば、約25クライアントしか持てません。

1つのポートで多数の接続を許可するために、HTTPサーバーはこれを問題なく実行します。

-1

実際には、1つのソケットはサーバー内のすべてのデータを処理しません。サーバーには、クライアントからの着信接続を受け入れることのみが目的とする待機ソケットがあります。次に、クライアントごとに1つの接続/ソケットを取得します。

オペレーティングシステムは、接続されているすべてのソケット(自分や他のアプリケーション)間で帯域幅を均等に分配しようとします。 UDPソケットは、TCPソケットよりも高い優先順位を持っています。

サーバは、ネットワーク帯域幅が処理できる限り、好きなだけクライアントを扱うことができます。いくつかのクライアントがあれば、ソケット/クライアント用にスレッドを使用できますが、多くの場合は非同期処理(BeginXX/EndXXメソッド)をお読みになることをお勧めします。

帯域幅に問題がある場合は、送受信を抑制する必要があります(最も簡単な方法は、Thread.Sleepを使用してネットワーク接続を遮断することです)。

+0

投票を奨励してください。 – jgauffin