1

このMSDN の記事を少し変更したバージョンを実行している非同期サーバーがあります。これにより、一度に 1 つのクライアントのみが参加できます。

私の質問は、トランザクションごとにソケットを開いたり閉じたりしても大丈夫ですか (TCP を使用します)。(より多くのクライアントをリッスンするコードを変更することによって) 複数のクライアントが参加できるようにすると、一部のメッセージが相互接続されているように見えます。たとえば、2 つのクライアントからサーバーからファイルをダウンロードしようとすると、最後に起動したクライアントがファイルを取得し、最初のクライアントがタイムアウトします。または、あるクライアントからデータの送信を開始し、別のクライアントから開始すると、サーバーは両方のデータを組み合わせて受信しました。

私のプログラムは (ゲームのように) 高いパフォーマンスを必要としないため、トランザクションごとのソケットの開閉に問題はありますか? または、複数のクライアントを処理するためのより良い方法はありますか?

編集 - リスナー自体は存続期間中開いたままになることを忘れていましたが、各クライアントはトランザクション自体のために新しいソケットを開いたり閉じたりします。MSDN リンクのコードでは、変数は「handler」です。

4

1 に答える 1

4

ソケットの開閉にはオーバーヘッドがあるため、短い答えはノーです (リッスン側では)。ただし、これはベストプラクティスにすぎないため、これについて心配していない場合は、機能するものを使用してください。

クライアントに関して言えば、ソケットの使用は、データを送信する予定の頻度に大きく依存します。まれに、ソケットを短期間オープンするのがおそらく標準です。何らかの「クロストーク」に気付いた場合、これはコードのエラーが原因である可能性が最も高いです。いくつかの参照については、MSDN の TcpClient および TcpListener クラスを確認してください。

于 2013-02-21T19:06:09.510 に答える