Simple Telnet console that listens and accepts connections

John Smith picture John Smith · Oct 3, 2013 · Viewed 32.4k times · Source

I am new to Telnet and C# and I am trying to create a simple console program. I need a TCP listener that starts up, listens for incoming networking connections and sends a response back. I don’t really care for the incoming message but I need to accept it so the client thinks that the connection was successful. This TCP listener will respond with “Hello”. I just need to make sure that it starts up cleanly and close the TCP listener gracefully without throwing any exceptions. I need to use “Telnet localhost 9090” to connect to the TCP listener on your laptop on port 9090.

Can you help?

Answer

Jaycee picture Jaycee · Oct 4, 2013

Use the TCPListener class. The example echoes the string sent to it from the client provided in the second set of code so it sends the response Howdy. You can test this when you run the client code below, which calls Socket.Receive to get the string back from the server:

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace tcplistener
{
    class Program
    {
        static void Main(string[] args)
        {
             TcpListener server = null;
        try
        {
            Int32 port = 9090;
            IPAddress localAddr = IPAddress.Parse("127.0.0.1");

            server = new TcpListener(localAddr, port);

            // Start listening for client requests.
            server.Start();

            // Buffer for reading data
            Byte[] bytes = new Byte[256];
            String data = null;

            // Enter the listening loop. 
            while (true)
            {
                Console.Write("Waiting for a connection... ");

                // Perform a blocking call to accept requests. 
                // You could also user server.AcceptSocket() here.
                TcpClient client = server.AcceptTcpClient();
                Console.WriteLine("Hello!");

                data = null;

                // Get a stream object for reading and writing
                NetworkStream stream = client.GetStream();

                int i;

                // Loop to receive all the data sent by the client. 
                while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    // Translate data bytes to a ASCII string.
                    data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                    Console.WriteLine("Received: {0}", data);

                    // Process the data sent by the client.
                    data = data.ToUpper();

                    byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

                    // Send back a response.
                    stream.Write(msg, 0, msg.Length);
                    Console.WriteLine("Sent: {0}", data);
                }

                // Shutdown and end connection
                client.Close();
            }
        }
        catch (SocketException e)
        {
            Console.WriteLine("SocketException: {0}", e);
        }
        finally
        {
            // Stop listening for new clients.
            server.Stop();
        }


        Console.WriteLine("\nHit enter to continue...");
        Console.Read();

        }
    }
}

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace tcpconnect
{
    class Program
    {
        static void Main(string[] args)
        {
            Connect1("127.0.0.1", 9090);

            Console.Read();
        }

        // Synchronous connect using IPAddress to resolve the  
        // host name. 
        public static void Connect1(string host, int port)
        {
            IPAddress[] IPs = Dns.GetHostAddresses(host);

            Socket s = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream,
                ProtocolType.Tcp);

            Console.WriteLine("Establishing Connection to {0}",
                host);
            s.Connect(IPs[0], port);

            byte[] howdyBytes = Encoding.ASCII.GetBytes("Howdy");
            s.Send(howdyBytes);
            byte[] buffer = new byte[50];
            s.Receive(buffer);
            Console.Write(Encoding.ASCII.GetString(buffer));
            Console.WriteLine("Connection established");
        }
    }
}