2

通常、クライアント/サーバー通信用に異なるポートが必要になるのはいつですか?(この質問は、C#および一般的なソケットプログラミングに関するものです)。

単純なC#クライアントサーバーアプリケーションを実装して使用しています。基本的に:

  • サーバーはクライアントをリッスンします
  • 受け入れられた/接続された
  • サーバースポーンクライアントスレッド-
  • サーバーはクライアントが話すのを待つ
  • クライアントトーク
  • サーバーの応答
  • クライアントトーク
  • サーバーの応答など。

NetworkStream.Read()クライアントが会話を停止した場合、クライアント側が切断しない限り、サーバーはその生成されたスレッドで永久にモードでブロックします。

私は今、どちらかの側で何らかのイベントが発生するまで両側が静かになり、クライアントまたはサーバーのみがデータを送信する状況を考えています。そのため、両方が何らかの形で同時にNetworkStream.Readモードになり、同時に相互に送信できる必要があります(イベントが両側で同時に発生した場合)。

この場合、異なるポートが必要ですか、それともクライアントとサーバーの両方をNetworkStream.BeginReadモードにすることができますか?NetworkStreamが書き込みモードと送信モードの両方で同時に発生するという問題のリスクはありませんか?

ありがとう。

4

1 に答える 1

1

すばらしい質問です。私はそのアーキテクチャで複数のアプリを作成しました。双方向通信が必要な場合は、クライアントとサーバーの間に2つの接続(もちろん、2つの異なるポート)が必要です。

  1. リクエストがクライアントからサーバーに流れる接続
  2. リクエストがサーバーからクライアントに流れる接続

そうすれば、両方の側がNetworkStream読む準備ができます。また、2つのフロー間の独立性のレベルに気付くと、双方向のリクエスト処理コードをより細かく制御できます。

于 2011-07-25T18:48:17.270 に答える