@HiLevel
Нет лучше кода, как говно у входа

Как сделать сервер C#?

Здравствуйте! Есть код на C# приложения сервер-клиент.
Вот код сервера:
class ClientObject
spoiler
public TcpClient client;
        public ClientObject(TcpClient tcpClient)
        {
            client = tcpClient;
        }

        public void Process()
        {
            NetworkStream stream = null;
            try
            {
                stream = client.GetStream();
                byte[] data = new byte[64]; // буфер для получаемых данных
                while (true)
                {
                    // получаем сообщение
                    StringBuilder builder = new StringBuilder();
                    int bytes = 0;
                    do
                    {
                        bytes = stream.Read(data, 0, data.Length);
                        builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
                    }
                    while (stream.DataAvailable);

                    string message = builder.ToString();

                    Console.WriteLine(message);
                    Console.WriteLine("/");
                    // отправляем обратно сообщение в верхнем регистре
                    message = Console.ReadLine();
                    
                        data = Encoding.Unicode.GetBytes(message);
                    
                        stream.Write(data, 0, data.Length);
                    
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (stream != null)
                    stream.Close();
                if (client != null)
                    client.Close();
            }
        }

class Program
spoiler
const int port = 8888;
        static TcpListener listener;
        static void Main(string[] args)
        {
            try
            {
                listener = new TcpListener(port);
                listener.Start();
                Console.WriteLine("Ожидание подключений...");
                
                TcpClient client = listener.AcceptTcpClient();
                ClientObject clientObject = new ClientObject(client);
                Thread clientThread = new Thread(new ThreadStart(clientObject.Process));
                clientThread.Start();
            
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (listener != null)
                    listener.Stop();
            }
        }


А вот сам клиент:

class Program
spoiler
const int port = 8888;
        const string address = "127.0.0.1";
        static void Main(string[] args)
        {
            Console.Write("Введите свое имя:");
            string userName = Console.ReadLine();
            TcpClient client = null;
            
                client = new TcpClient(address, port);
                NetworkStream stream = client.GetStream();

                while (true)
                {
                    Console.Write(userName + ": ");
                    // ввод сообщения
                    string message = Console.ReadLine();
                    message = String.Format("{0}: {1}", userName, message);
                    // преобразуем сообщение в массив байтов
                    byte[] data = Encoding.Unicode.GetBytes(message);
                    // отправка сообщения
                    stream.Write(data, 0, data.Length);
                    // получаем ответ
                    data = new byte[64]; // буфер для получаемых данных
                    StringBuilder builder = new StringBuilder();
                    int bytes = 0;
                    do
                    {
                        bytes = stream.Read(data, 0, data.Length);
                        builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
                    }
                    while (stream.DataAvailable);

                    message = builder.ToString();
                    Console.WriteLine("Сервер: {0}", message);
                }
            
        }

Сама суть проблемы..
Дело в том, что когда я подключаюсь к серверу через клиент, сервер запускает под это соединение поток.. Когда же запускаешь еще один клиент, выходит еще один тред, тем самым из-за этого я не могу единоразово отправить на все клиенты одно и то же сообщение. То есть когда ввожу, сначала отправляется на первый подключенный клиент, когда ввожу второй раз, на второй кидается итд..

Подскажите пож-ста как решить такую проблемку
  • Вопрос задан
  • 321 просмотр
Пригласить эксперта
Ответы на вопрос 2
petermzg
@petermzg
Самый лучший программист
Так не создавайте отдельные потоки под каждое новое клиентское подключение.
Сохраняйте подключения в массив и когда будет неоходимо отсылайте данные во все сохраненные подключения.
Ответ написан
@RomarioSPb
https://metanit.com/sharp/net/4.2.php - вроде все доступно написано, вдруг поможет.
Можно как вариант использовать асинхронный TcpListener и не заморачиваться с сокетами
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ИММА Москва
До 120 000 руб.
Кнопка Екатеринбург
До 150 000 руб.
PHYGITALISM Москва
от 70 000 руб.