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, an IPAddress

  • Port, an int

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.