TCP Echo Server в C # - PullRequest
       3

TCP Echo Server в C #

0 голосов
/ 16 мая 2019

Пожалуйста, рассмотрите следующий код: я пытался написать простой сервер TCP Echo, который передавал бы все назад отправителю:

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

namespace EchoServer
{

    class Program
    {
        //global variables here
        public static int LISTEN_PORT = 3113;
        static void Main(string[] args)
        {

            TCPServer(LISTEN_PORT);
            System.Threading.Thread.Sleep(5000);
            Console.WriteLine("Bye!");
            //Console.ReadLine(); 
        }



        static void HandleIncomingTCPConnection(object client_in)
        {
            TcpClient client = (TcpClient)client_in;
            StreamReader sr = new StreamReader(client.GetStream());
            StreamWriter sw = new StreamWriter(client.GetStream());

            try
            {
                string request = "";
                while (sr.Peek() != -1)
                {
                    request += sr.ReadLine() + "\n";
                    Console.WriteLine("msg is " + request);
                    sw.WriteLine("You said: " + request);
                    sw.Flush();
                    Console.WriteLine("Exiting");
                }
            }
            catch (Exception Ex)
            {
                Console.Write("Something bad happenened.");
                Console.Write(Ex.Message + "\n");
            }
            client.Close();

        }
        static void TCPServer(int LISTEN_PORT)
        {

            TcpListener tcpListener = new TcpListener(IPAddress.IPv6Any, LISTEN_PORT);
            tcpListener.Server.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, false);
            tcpListener.Start();

            while (true)
            {
                Console.WriteLine("Awiting connection");
                TcpClient client = tcpListener.AcceptTcpClient();
                Console.WriteLine("Got connection");
                Thread thread2 = new Thread(HandleIncomingTCPConnection);
                thread2.Start(client);
            }

        }

    }
}

Кажется, это работает, не совсемхотя я хочу, чтобы:

$ telnet 0 3113
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
some line
You said: some line

Connection closed by foreign host. // <-- This 
$ telnet 0 3113

Это закрывает клиентское соединение Telnet после каждой строки, а это не то, что я хочу.Я бы хотел, чтобы сеанс telnet оставался открытым, и отображал каждую передаваемую строку, пока я не нажму ctrl-c прослушивающий exe или не завершу его.

Видимо, я что-то упустил, и мне нужна помощь, чтобы понять это!Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...