2012-05-09 4 views
8

TCP/IP를 통해 통신하는 클라이언트 - 서버 응용 프로그램이 있습니다.
TCP를 통한 비동기 통신을 위해 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

이것은 굉장하다 :) 나는 couldnt한다 이렇게 생각한다. 감사. – Fer

+2

그 스트림의 사용자가'myStream.Close()'를 호출하기를 원한다면, 소켓의 소유권으로 NetworkStream을 구성하는 것이 좋습니다 :'new NetworkStream (mySocket, true)'. 그렇지 않으면 읽기 작업에서 블록하는 스레드가 스트림을 닫은 후에도 여전히 차단되는지 궁금해집니다. –