2017-04-16 20 views
0

私は数秒でWebカメラで撮影した写真をストリームするc#windowsフォームのアプリケーションを用意しています。写真のデータは、TCPポートで受信しているサーバーに送信されます。このアプリケーションは、数百台のコンピュータにインストールされている場合1つのTCPポートに接続できるクライアントの数

私の質問は、1つのポートでリッスンするために問題がなければならないか、私は各クライアントに別のポートを割り当てる必要がありますか?写真は数秒ごとに送信されることに注意してください。

ここは私のサーバーリスナーのコードです。

   Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
       socket.Bind(new IPEndPoint(IPAddress.Parse("some ip"),5001)); 

       Task.Factory.StartNew(() => 
       { 
        socket.Listen(500); 
        //socket listening code. 

       }, TaskCreationOptions.LongRunning); 

ありがとうございました。

答えて

1

複数のクライアントが同じポート上で通信できるように、同じポート上で複数のソケットを聴くことができます。

たとえば、ウェブサイトにアクセスすると、ポート80(または443 for https)のサーバーに接続していることがわかります。たいていの場合、複数のクライアントからウェブサイトにアクセスできます、そしてすべてが同じポートにあります! ;)

3

TCP接続には、送信元IPアドレスとポート、および宛先IPアドレスとポートの4つのパラメータがあります。これらの4つがユニークであれば、混乱は起こりません。

ソースが実際にユニークなアドレス(IPv6である可能性が高い)を割り当てられているか、NATデバイス(したがってユニファイドソースポート)にトンネリングされているマシンであれば、サーバ側で何もする必要はありません。


あなたが接続されている各クライアントにを割り当てることを考えているなら(ソケットおよびいくつかのバッファを超えて)、あなたはおそらく何か間違ったことをやっています。 の排他的なリソースをクライアントに捧げないでください。

2

参照:C10k problem

リスナーポートを使用することに注意してください、リスナーがそれを手渡した後、あなたが確立された接続のための一時ポートを使用して終了舞台裏- しかしない接続するクライアントの観点、から問題 - リスナーポートは、最終的なすべてのソケットの単一のエントリポイントのままです。

FWIW:スタックオーバーフローにここ現在平均でポートあたり14,500ソケット、サービスインスタンスごとに3つのポート、9つのサービスインスタンス、およそ392,000ソケットの合計をリアルタイム更新を駆動するウェブ・ソケット・サーバ。私たちはこれまでのところいくつかの点でそれをはるかに高く見てきました。そう、はい、あなたは簡単にサポートする単一のリスナーポート、しかしの数百のクライアントをサポートすることができます:それは自明ではないソケットをサポートしています。非常に少ない数のクライアント。

関連する問題