2012-05-09 8 views
8

私はTCP/IPで通信するクライアント/サーバーアプリケーションを持っています。
私はSystem.Net.Sockets.Socketを使用しています。基本的に私は接続の送受信データを開き、接続を閉じます。私の実装はソケット型のオブジェクトに基づいています。
今私はサードパーティのDLLを使用して何かをする必要があります。このDLLは、System.IO.Streamタイプのオブジェクトを予期しています。だから私は得る必要がありますストリーム私のオブジェクトのオブジェクトです。
どうすればいいですか?
ありがとうございます。Cでソケットオブジェクトのストリームを取得する#

+3

ソケットとストリームを混合する際には注意してください - ソケットインスタンスは、スレッドセーフである - ストリームのインスタンスではありません! – weismat

答えて

15

かなり簡単です。 NetworkStreamクラスのコンストラクタは、ラップするソケットを受け入れ:

http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.aspx

// NOTE: This demonstrates disposal of the stream when you are 
// done with it- you may not want that behavior. 
using (var myStream = new NetworkStream(mySocket)) { 
    my3rdPartyObject.Foo(myStream); 
} 
+1

これは素晴らしいです:)私はこのように考えることができませんでした。ありがとう。 – Fer

+2

そのストリームのユーザが 'myStream.Close()'を呼びたい場合は、 'new NetworkStream(mySocket、true)'というソケットの所有権でNetworkStreamを構築することをお勧めします。そうしないと、ストリームを閉じた後に読み込み操作でブロックされたスレッドがなぜブロックされているのか不思議に思うことになります。 –

関連する問題