static void Main(string[] args)
    {
        IPAddress ipAddress  = IPAddress.Any;
        int       portNumber = 8092;
        int       len        = 256;

        Byte[]             buff     = new Byte[len];
        Byte[]             response = new Byte[len];
        TcpServer.CallBack callback = new TcpServer.CallBack(TcpServerTest.toLower);

        TcpServer.Serve(ipAddress, portNumber, buff, len, response, logger, callback);
    }     /* end void Main(String[]) */
        }         /* end void Serve(IPAddress, int, Byte[], int, TraceSource, TcpServer.CallBack) */

        private static bool Processing(NetworkStream stream, Byte[] buff, int len, Byte[] response, TraceSource logger, TcpServer.CallBack callback)
        {
            int nRead;
            int nProcessed;

            nRead      = stream.Read(buff, 0, len);
            nProcessed = callback(eventId, buff, nRead, response);
            TcpServer.Log(logger, TraceEventType.Verbose, (eventId + 1), "Responded: {0}", Encoding.UTF8.GetString(response, 0, nProcessed));
            stream.Write(response, 0, nProcessed);
            return(0 != nRead);
        }
        public static void Serve(IPAddress ipAddress, int portNumber, Byte[] buff, int len, Byte[] response, TraceSource logger, TcpServer.CallBack callback)
        {
            TcpListener   server = null;
            TcpClient     client = null;
            NetworkStream stream;
            bool          isRequested = true;

            try {
                try {
                    server = new TcpListener(ipAddress, portNumber);
                    server.Start();

                    while (isRequested)
                    {
                        TcpServer.Log(logger, TraceEventType.Verbose, eventId++, "Connecting to {0}:{1}", ipAddress, portNumber);
                        try {
                            using (client = server.AcceptTcpClient()) {
                                TcpServer.Log(logger, TraceEventType.Start, eventId++, "Connected to {0}:{1}", ipAddress, portNumber);
                                stream = client.GetStream();
                                while (TcpServer.Processing(stream, buff, len, response, logger, callback))
                                {
                                    ;
                                }
                            }                             /* end using (TcpClient client) */
                        }
                        finally {
                            if (null != client)
                            {
                                client.Close();
                            }     /* end if (null != client) */
                            isRequested = false;
                        }         /* end finally */
                    }             /* end while (isRequested) */
                }                 /* end try { server.Start(); } */
                finally {
                    if (null != server)
                    {
                        server.Stop();
                    }     /* end if (null != server) */
                }         /* end finally */
            }             /* end try { server.Start(); server.Stop(); } */
            catch (SocketException se) {
                TcpServer.Log(logger, TraceEventType.Error, eventId++, "SocketException {1}: {0}", se, se.ErrorCode);
            }     /* end catch (SocketException se) */
        }         /* end void Serve(IPAddress, int, Byte[], int, TraceSource, TcpServer.CallBack) */