16.1. Writing a TCP Server
Problem
You need to create a server that listens on a port for incoming requests from a TCP client. These client requests can then be processed at the server, and any responses can be sent back to the client. Recipe 16.2 shows how to write a TCP client to interact with this server.
Solution
Use the MyTcpServer
class created here to listen on a TCP-based endpoint for requests arriving on a given port:
class MyTcpServer { #region Private Members private TcpListener _listener; private IP Address _address; private int _port; private bool _listening; private object _syncRoot = new object(); #endregion #region CTORs public MyTcpServer(IPAddress address, int port) { _port = port; _address = address; } #endregion // CTORs
The TCPServer
class has two properties:
Address
, anIPAddress
Port
, anint
These return the current address and port on which the server is listening and the listening state:
#region Properties public IPAddress Address { get { return _address; } } public int Port { get { return _port; } } public bool Listening { get { return _listening; } } #endregion
The Listen
method tells the MyTcpServer
class to start listening on the specified address and port combination. You create and start a TcpListener
, and then call its AcceptTcpClient
method to wait for a client request to arrive. Once the client connects, a request is sent to the thread pool to service the client and that runs the ProcessClient
method.
The listener shuts down after serving the client:
#region ...
Get C# 3.0 Cookbook, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.