Написал сервер для чата, который должен работать постоянно. Но он почему то выключается при запуске, исключений не бросает. В чем ошибка?
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);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Мне необходимо создать программно новый сайт в IISДля этого использую команду:
Можно ли как-то получить данные из класса, используя только имя экземпляра классаТо есть
Как создать вебсокет сервер, чтобы к нему могли подключиться не только локально, но и пользователи по всему миру?
Как заставить VS 2019 использовать предварительные версии, когда включена опция use previews of thenet core sdk? Нужны стандартные шаблоны (предварительной...