네트워크에서 스트림 사용Using Streams on the Network

네트워크 리소스는 .NET Framework에서 스트림으로 표현됩니다.Network resources are represented in the .NET Framework as streams. 스트림을 일반적으로 처리하여 .NET Framework는 다음과 같은 기능을 제공합니다.By treating streams generically, the .NET Framework offers the following capabilities:

  • 웹 데이터를 송수신하는 일반적인 방법.A common way to send and receive Web data. 파일의 실제 내용에 관계없이(HTML, XML 또는 기타 모든 항목) 응용 프로그램은 Stream.WriteStream.Read를 사용하여 데이터를 주고받습니다.Whatever the actual contents of the file — HTML, XML, or anything else — your application will use Stream.Write and Stream.Read to send and receive data.

  • .NET Framework 전체에서 스트림과 호환성.Compatibility with streams across the .NET Framework. 스트림은 처리를 위한 풍부한 인프라가 있는 .NET Framework 전체에서 사용됩니다.Streams are used throughout the .NET Framework, which has a rich infrastructure for handling them. 예를 들어 스트림을 초기화하는 코드 몇 줄만 변경하여 FileStream에서 XML 데이터를 읽는 응용 프로그램을 NetworkStream에서 데이터를 읽도록 수정할 수 있습니다.For example, you can modify an application that reads XML data from a FileStream to read data from a NetworkStream instead by changing only the few lines of code that initialize the stream. NetworkStream 클래스와 다른 스트림 간의 주요 차이점은 NetworkStream은 검색할 수 없고, CanSeek 속성은 항상 false를 반환하고, SeekPosition 메서드는 NotSupportedException을 throw한다는 것입니다.The major differences between the NetworkStream class and other streams are that NetworkStream is not seekable, the CanSeek property always returns false, and the Seek and Position methods throw a NotSupportedException.

  • 데이터 도착 시 처리.Processing of data as it arrives. 스트림은 전체 데이터 집합이 다운로드될 때까지 응용 프로그램을 강제로 대기시키는 대신 네트워크에서 도착하는 대로 데이터에 대한 액세스를 제공합니다.Streams provide access to data as it arrives from the network, rather than forcing your application to wait for an entire data set to be downloaded.

System.Net.Sockets 네임스페이스에는 네트워크 리소스에 사용할 수 있도록 특별히 고안된 Stream 클래스를 구현하는 NetworkStream 클래스가 포함되어 있습니다.The System.Net.Sockets namespace contains a NetworkStream class that implements the Stream class specifically for use with network resources. System.Net.Sockets 네임스페이스에 있는 클래스는 NetworkStream 클래스를 사용하여 스트림을 나타냅니다.Classes in the System.Net.Sockets namespace use the NetworkStream class to represent streams.

반환된 스트림을 사용하여 데이터를 네트워크에 보내려면 WebRequest에서 GetRequestStream을 호출합니다.To send data to the network using the returned stream, call GetRequestStream on your WebRequest. WebRequest는 요청 헤더를 서버에 보냅니다. 그러면 반환된 스트림에서 BeginWrite, EndWrite 또는 Write 메서드를 호출하여 데이터를 네트워크 리소스에 보낼 수 있습니다.The WebRequest will send request headers to the server; then you can send data to the network resource by calling the BeginWrite, EndWrite, or Write method on the returned stream. HTTP와 같은 일부 프로토콜의 경우 데이터를 보내기 전에 프로토콜 관련 속성을 설정해야 할 수도 있습니다.Some protocols, such as HTTP, may require you to set protocol-specific properties before sending data. 다음 코드 예제에서는 데이터 전송을 위한 HTTP 관련 속성을 설정하는 방법을 보여 줍니다.The following code example shows how to set HTTP-specific properties for sending data. sendData 변수에 보낼 데이터가 들어 있고 sendLength 변수는 보낼 데이터의 바이트 수라고 가정합니다.It assumes that the variable sendData contains the data to send and that the variable sendLength is the number of bytes of data to send.

HttpWebRequest request =   
   (HttpWebRequest) WebRequest.Create("http://www.contoso.com/");  
request.Method = "POST";  
request.ContentLength = sendLength;  
try  
{  
   Stream sendStream = request.GetRequestStream();  
   sendStream.Write(sendData,0,sendLength);  
   sendStream.Close();  
}  
catch  
{  
   // Handle errors . . .  
}  
Dim request As HttpWebRequest = _  
   CType(WebRequest.Create("http://www.contoso.com/"), HttpWebRequest)  
request.Method = "POST"  
request.ContentLength = sendLength  
Try  
   Dim sendStream As Stream = request.GetRequestStream()  
   sendStream.Write(sendData, 0, sendLength)  
   sendStream.Close()  
Catch  
   ' Handle errors . . .  
End Try  

네트워크에서 데이터를 수신하려면 WebResponse에서 GetResponseStream을 호출합니다.To receive data from the network, call GetResponseStream on your WebResponse. 반환된 스트림에서 BeginRead, EndRead 또는 Read 메서드를 호출하여 네트워크 리소스에서 데이터를 읽을 수 있습니다.You can then read data from the network resource by calling the BeginRead, EndRead, or Read method on the returned stream.

네트워크 리소스의 스트림을 사용하는 경우 다음 사항에 유의하세요.When using streams from network resources, keep in mind the following points:

  • NetworkStream 클래스가 스트림 내의 위치를 변경할 수 없기 때문에 CanSeek 속성은 항상 false를 반환합니다.The CanSeek property always returns false since the NetworkStream class cannot change position in the stream. SeekPosition 메서드는 NotSupportedException을 throw합니다.The Seek and Position methods throw a NotSupportedException.

  • WebRequestWebResponse를 사용하는 경우 GetResponseStream을 호출하여 만든 스트림 인스턴스는 읽기 전용이고 GetRequestStream을 호출하여 만든 스트림 인스턴스는 쓰기 전용입니다.When you use WebRequest and WebResponse, stream instances created by calling GetResponseStream are read-only and stream instances created by calling GetRequestStream are write-only.

  • StreamReader 클래스를 사용하여 인코딩을 용이하게 합니다.Use the StreamReader class to make encoding easier. 다음 코드 예제에서는 StreamReader를 사용하여 WebResponse에서 ASCII로 인코드된 스트림을 읽습니다(예제에는 요청을 만드는 방법이 포함되지 않음).The following code example uses a StreamReader to read an ASCII-encoded stream from a WebResponse (the example does not show creating the request).

  • 네트워크 리소스를 사용할 수 없는 경우 GetResponse 호출이 차단할 수 있습니다.The call to GetResponse can block if network resources are not available. BeginGetResponseEndGetResponse 메서드와 함께 비동기 요청을 사용하는 것이 좋습니다.You should consider using an asynchronous request with the BeginGetResponse and EndGetResponse methods.

  • 서버에 연결하는 동안 GetRequestStream 호출이 차단할 수 있습니다.The call to GetRequestStream can block while the connection to the server is created. BeginGetRequestStreamEndGetRequestStream 메서드와 함께 스트림에 대한 비동기 요청을 사용하는 것이 좋습니다.You should consider using an asynchronous request for the stream with the BeginGetRequestStream and EndGetRequestStream methods.

// Create a response object.  
WebResponse response = request.GetResponse();  
// Get a readable stream from the server.  
StreamReader sr =   
   new StreamReader(response.GetResponseStream(), Encoding.ASCII);  
// Use the stream. Remember when you are through with the stream to close it.  
sr.Close();  
' Create a response object.  
Dim response As WebResponse = request.GetResponse()  
' Get a readable stream from the server.  
Dim sr As _   
   New StreamReader(response.GetResponseStream(), Encoding.ASCII)  
' Use the stream. Remember when you are through with the stream to close it.  
sr.Close()  

참고 항목See Also

방법: WebRequest 클래스를 사용하여 데이터 요청How to: Request Data Using the WebRequest Class
데이터 요청Requesting Data