3

.Net プログラマ向けの簡単なステップバイステップの通信チュートリアルを探していました。いくつかの Google クエリの後、net-informations.com で「CSharp Communications」コード コレクションを見つけました。「 How to C# Chat Server」の例にたどり着いた限り、それはかなり良さそうに見えました。

著者は、HashTable コンテナーを使用してマルチスレッド サーバーを提案し、すべての接続をサーバー側の共有メモリに保持します。MSDN のドキュメントによると、ブロードキャスト メッセージに使用されるTcpClientおよびNetworkStreamクラスはスレッド セーフではありませんが、例では複数のサーバー スレッドからそれらを使用しています。

私の質問は次のとおりです。

  1. 例が間違っていることを確認できますか?
  2. ブロードキャスト メソッドをロックする (クリティカル セクションとしてマークする) だけで十分ですか?
  3. ソケット通信のチュートリアルをお勧めできますか (.Net を推奨)。
4

2 に答える 2

5

私がほぼ 7 年前に書いたので完璧ではありませんが、TCP 通信の分野をカバーしており、理解を深めることができます。

汎用 TCP/IP クライアント サーバー

于 2012-05-14T09:42:03.150 に答える
1

MSDN のドキュメントによると、ブロードキャスト メッセージに使用される TcpClient および NetworkStream クラスはスレッド セーフではありませんが、例では複数のサーバー スレッドからそれらを使用しています。

正解です; しかし、それは同時アクセスに関するものです。各スレッドが順番にインスタンスを使用する場合 (たとえば、ロックを使用してアクセスを制御する場合)、異なるスレッドを使用できます。

つまり、スレッドセーフではないということは、単一のスレッドに結び付けられていることを意味するわけではありません。

于 2012-05-14T09:42:20.740 に答える