The NetworkStream class abstracts the transfer of data over networks. The underlying mechanism used for transmission is System.Net.Sockets.Socket, which is actually used by all the classes in the System.Net namespace that pertain to network communication. Socket can be used directly, but like Stream, higher-level classes make interaction over the network much simpler. This chapter discusses two of these classes: TcpClient and TcpListener.
It is hard to find a machine that doesn't have several TCP-based clients already on it. Most have an email client, a web browser, or maybe even a Napster client (that sadly does not do a thing). TcpClient, which uses the Socket class, makes it easy to connect, send, and receive data over a network, facilitating the creation of these types of clients.
Most Internet applications work as follows: a connection is established to a server on a specified port, data is sent in a specified format, and a response is received. It's as simple as that. The difficult part has always been working with sockets, but .NET abstracts the difficulty away.
By using TcpClient, creating a TCP-based client is easy. For instance, Example 8-16 contains the listing for a finger client. Finger used to be more popular than it is today. It associates information with an email address, so someone with a finger client can type
and retrieve all kinds of information—possibly the real name of the person, where the person currently ...