Программа выключается при запуске, а должна работать постоянно

220
02 июля 2021, 22:50

Написал сервер для чата, который должен работать постоянно. Но он почему то выключается при запуске, исключений не бросает. В чем ошибка?

using System;
using System.Collections.Concurrent;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace Chat_Server
{
    class Server
    {
        private static readonly IPHostEntry ipHost = Dns.GetHostEntry("localhost");
        private static readonly IPAddress ipAddr = ipHost.AddressList[0];
        private static readonly IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000);
        private readonly ConcurrentDictionary<Socket, String> clients = new ConcurrentDictionary<Socket, string>();
        private Socket sListener;
        public Server()
        {
            sListener = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            sListener.Bind(ipEndPoint);
            sListener.Listen(10);
            Console.WriteLine("Сервер запущен.");
        }
        public void RegistrationClient()
        {
            while (true)
            {
                if (sListener != null)
                {
                    Socket client = sListener.Accept();
                    string nickName = null;
                    byte[] buffer = new byte[1024];
                    Console.WriteLine("Новое подключение. Регистрация пользователя.");
                    client.Send(Encoding.UTF8.GetBytes("Добро пожаловать! Как Вас зовут?"));
                    int bytesRec = client.Receive(buffer);
                    nickName = Encoding.UTF8.GetString(buffer, 0, bytesRec);
                    if (nickName != null)
                    {
                        clients.TryAdd(client, nickName);
                        string message = CreateMessage("server", nickName + "добавлен в чат.");
                        SendMessageToClients(message);
                    }
                }
            }
        }
        public void Listen()
        {
            while (true)
            {
                foreach (var client in clients)
                {
                    byte[] buffer = new byte[1024];
                    int bytesRec = client.Key.Receive(buffer);
                    string message = CreateMessage(client.Value, Encoding.UTF8.GetString(buffer, 0, bytesRec));
                    SendMessageToClients(message);
                }
            }
        }
        private string CreateMessage(string nickName, string text)
        {
            return DateTime.Now.ToString("hh:mm:ss - ") + String.Format("{0} : {1}", nickName, text);
        }
        private void SendMessageToClients(string message)
        {
            foreach (var client in clients)
            {
                client.Key.Send(Encoding.UTF8.GetBytes(message));
            }
            Console.WriteLine(message);
        }
    }
}

Запуск:

static void Main(string[] args)
{
    Server server = new Server();
    Task.Factory.StartNew(() => server.RegistrationClient(), TaskCreationOptions.LongRunning);
    Task.Factory.StartNew(() => server.Listen(), TaskCreationOptions.LongRunning);
}
READ ALSO
Создание сайта в IIS из PowerShell

Создание сайта в IIS из PowerShell

Мне необходимо создать программно новый сайт в IISДля этого использую команду:

118
Значение по имени экземпляра класса

Значение по имени экземпляра класса

Можно ли как-то получить данные из класса, используя только имя экземпляра классаТо есть

105
C# WebSocket Server

C# WebSocket Server

Как создать вебсокет сервер, чтобы к нему могли подключиться не только локально, но и пользователи по всему миру?

163
Не могу включить ASP.NET Core 3 preview

Не могу включить ASP.NET Core 3 preview

Как заставить VS 2019 использовать предварительные версии, когда включена опция use previews of thenet core sdk? Нужны стандартные шаблоны (предварительной...

136