代码之家  ›  专栏  ›  技术社区  ›  John Smith

监听和接受连接的简单Telnet控制台

  •  9
  • John Smith  · 技术社区  · 11 年前

    我是Telnet和C#的新手,我正在尝试创建一个简单的控制台程序。我需要一个TCP侦听器,它可以启动、侦听传入的网络连接并发回响应。我真的不在乎收到的消息,但我需要接受它,这样客户就会认为连接成功了。此TCP侦听器将以Hello作为响应。 我只需要确保它干净地启动并优雅地关闭TCP侦听器,而不会抛出任何异常。我需要使用Telnet localhost 9090在端口9090上连接到笔记本电脑上的TCP侦听器。

    你能帮忙吗?

    2 回复  |  直到 11 年前
        1
  •  22
  •   Jaycee    11 年前

    使用 TCPListener 班该示例回显从第二组代码中提供的客户端发送给它的字符串,因此它发送响应Howdy。您可以在运行下面的客户端代码时对此进行测试,该代码调用 套接字接收 要从服务器获取字符串,请执行以下操作:

    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");
            }
        }
    }
    
        2
  •  6
  •   PeterJ    2 年前

    你可以使用我在互联网上找到的这个简单Telnet服务器: https://github.com/robertripoll/TelnetServer

    您可以将此代码作为计划构建的程序的基础。