Пожалуйста, рассмотрите следующий код: я пытался написать простой сервер 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 или не завершу его.
Видимо, я что-то упустил, и мне нужна помощь, чтобы понять это!Спасибо!