2010-12-01 48 views
4

私は、クライアントとサーバーの間の通信を抽象化したいプロジェクトがあります。私は当初ソケットとTCPを使用していました。私は、プロセス間通信チャネルに切り替えることができればいいと思っていました。私はSystem.IO.PipedStreamクラスを調べ、PipeStreamクラスとSocketクラスの間に重複が多くあることを確認しました。しかし、Socketクラスを見たとき、Objectから継承しています。したがって、SocketクラスとPipeStreamクラスの間には、共通のインタフェースや抽象クラスはありません。NetworkStreamクラスとSocketクラスの違いは何ですか?

私はNetworkStreamについて何か思い出しました。それは明らかにSocketクラスをラップします。しかし、少なくともNetworkStreamとPipeStreamの両方はStreamから継承します。つまり、実装を取り替えることができます。私はまだこれを試していないと思う。私は今回すべてソケットを使用しています。

私の質問です:Socketクラス以上のNetworkStreamクラスを使用することに不利な点はありますか。どんな厄介なことや何か気にするものはありますか?

+0

高レベルの通信では、生のTCPまたはパイプよりもWFCを使用する方が良い –

+0

WCFはオプションではありません。 – uriDium

+0

「それはいいかもしれない...」とまったく同じ意味ですか? TCP/IPソケットはプロセス間通信の完全に有効な形式です。 –

答えて

1

ソケットやパイプなどの低レベルのオプションを使用する必要があり、そのデータソースからストリーミングデータを取得する抽象化が必要な場合は、Streamクラスがそのモデルの抽象化を提供するので完璧です。

ストリームインスタンスに対してコードを作成すると、Streamを実装することができ、基になるトランスポートについて心配する必要はありません。

NetworkStreamとSocketを使用する場合、NetworkStreamはSocketインスタンスをラップし、その呼び出しをプルモデル(Stream)にSocketに適用します。

+0

@ casperOne:答えをありがとう。プルモデルの意味を広げることができますか? – uriDium

+0

@uriDium:プルモデルとプッシュモデルを区別する答えが更新されました。 – casperOne

+0

ehh。あなたは何について話していますか?プルとプッシュは物事と何をするのですか? – jgauffin

1

SocketからNetworkStreamに切り替える際の不都合はわからないので、ソケットを直接使用する必要はほとんどありません。 Socketはより多くの制御を提供しますが、欠点を認識していないため、制御を必要としない可能性が最も高いでしょう。

ちょうどあなたがNetworkStreamに切り替わったからといって、物事が信頼性が高くない、または速くならないことを覚えておいてください。 (異なるストリームの実装を切り替えるときに忘れやすいかもしれません)。

関連する問題