0

N人(たとえば約5人)のユーザーがTCPソケットを介してWebサービスに接続するのを待つWebアプリケーションを開発しています。サーバーは接続されているソケットの数を追跡し、Nに達すると、(最大2MBの)(単一の)ファイルをすべてのソケットに同時に送信します。ここではタイミングに重点が置かれています。ファイルを次々に受信するのではなく、すべて同時に受信する必要があります。

C#とソケットプログラミングの初心者として、この場合の最善のアプローチを知りたいですか?私は次のことを考えました:サーバーは(非同期で)ソケット接続を受信し、Nに達すると、ファイル内のすべてのバイトをループし、反復ごとに1キロバイト(またはそれ以下?)を各クライアントに送信します接続-これは、私の意見では、ファイルを同時に送信するための最も近い方法です。

これを実装する方法について少し混乱しています。どんな助けでも素晴らしいでしょう。ありがとう

編集:同時に受信することで、技術的には、サーバーがファイルを最初のクライアントに送信し、次に2番目に送信し、次に3番目に送信するのではなく、一度にすべてのクライアントに送信することを意味しました、サーバーの外に出ると、私の手に負えなくなります!ネットワークの問題がなく、クライアントがすべて(物理的に)非常に近いと仮定すると、クライアントは多かれ少なかれ同時にファイルを受信する必要があります。多分解決策は私が思っていたよりも簡単です...

4

1 に答える 1

0

すでにソケット接続を非同期で受け入れることを計画しており、コールバックは別のスレッドで発生するため、次のような非同期コールバックを使用できます。

  • 着信ソケット接続を受け入れます
  • (リスニングソケットで)BeginAccept()を再度呼び出します
  • ファイルを送信します
  • (以前に受け入れられたソケットの)接続を閉じます

複数のクライアントが同時に接続すると、複数のスレッドがファイルを同時に、ほぼ同時に送信することになります。

ファイルには一度に複数のスレッドからアクセスできる可能性があるため、たとえば。でファイルを開く必要がありますFileShare.Read

これがお役に立てば幸いです。これは実際には要件ではないことを理解しているため、「N個の同時クライアント」を無視しました。

于 2013-01-07T12:18:58.183 に答える