Network I/O is generally similar to
file I/O, and both Stream
and
TextReader
types are used to access to data from a
network connection. The System.Net
namespace
contains additional classes that are useful in dealing with common
network protocols such as HTTP, while the
System.Net.Sockets
namespace contains generalized
classes for dealing with network sockets.
To create a connection to a web server,
you will typically use the abstract WebRequest
class and its Create( )
and GetResponse(
)
methods. Create( )
is a static factory
method that returns a new instance of a subclass of
WebRequest
to handle the URL passed in to
Create( )
. GetResponse( )
returns a WebResponse
object, which provides a
method called GetResponseStream( )
. The
GetResponseStream( )
method returns a
Stream
object, which you can wrap in a
TextReader
. As you’ve already
seen, you can use a TextReader
to read from an I/O
stream.
The following code snippet shows a typical sequence for creating a
connection to a network data source and displaying its contents to
the console device. StreamReader
is a concrete
implementation of the abstract TextReader
base
class:
WebRequest request = WebRequest.Create("http://www.oreilly.com/"); WebResponse response = request.GetResponse( ); Stream stream = response.GetResponseStream( ); StreamReader reader = new StreamReader(stream); // Read a line at a time and write it to the console while (reader.Peek( ) != -1) { Console.WriteLine(reader.ReadLine( )); }
A network connection isn’t initiated until you call
the GetResponse( )
method. This gives you the
opportunity to set other properties of the
WebRequest
right up until the time you make the
connection. Properties that can be set include the HTTP headers,
connection timeout, and security credentials.
This pattern works fine when the data
source is a URL that adheres to the file
,
http
, or https
scheme.
Here’s an example of a web request that uses a URL
with a file
scheme:
WebRequest request = WebRequest.Create("file:///C:/data/file.xml");
Here’s a request that has no URL scheme at all:
WebRequest request = WebRequest.Create("file.xml");
In
the absence of a valid scheme name at the beginning of a URL,
WebRequest
assumes that you are referring to a
file on the local filesystem and translates the filename to
file://localhost/path/to/file
. On
Windows, the path C:datafile.xml thus becomes
the URL file://localhost/C:/data/file.xml
.
Technically, a URL using the file
scheme does not
require a network connection, but it behaves as if it does, as far as
.NET is concerned. Therefore, your code can safely treat a
file
scheme URL just the same as any other URL.
(For more on the URL file scheme, see http://www.w3.org/Addressing/URL/4_1_File.html
.)
Don’t try this with an
ftp
URL scheme, however. While
there’s nothing to stop you from writing your own
FTP client using the Socket
class, Microsoft does
not provide a means to access an FTP data source with a
WebRequest
.
3.14.70.203