Одновременное подключение несколько клиентов к одному серверу - C#

Узнай цену своей работы

Формулировка задачи:

Столкнулся с задачей. Есть сервер, который отправляет xml сообщения на клиент. Нужно сделать чтобы могло подключиться несколько клиентов к моему серверу. Чтобы они все получали мои файлы. Делал вот так:
 // Создаем TCP сервер и слушаем запросы клиентов
            TcpListener server = new TcpListener(IPAddress.Any,11000);
            server.Start();
 
                        // Проверяем, есть ли клиенты
            while (true)
            {
                server.AcceptTcpClient();
                Console.WriteLine("...Подключен клиент...");
            }
отправляю вот так:
byte[] xml = File.ReadAllBytes(string.Format(tb_xml_name.Text + "\\" + "F000{0}.xml", xml_filename));
                s.Send(xml);
                s.Close();
Отправка происходит после формирования xml файла. Нужно каждый подключившийся клиент, при помощи массива записывать и при помощи массива каждому клиенту отправлять сообщение. Помогите пожалуйста, как это реализовать в коде? Когда был один клиент, делал через сокет соединение. Заранее спасибо! )

Решение задачи: «Одновременное подключение несколько клиентов к одному серверу»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Windows.Forms;
using System.Threading;
using System.IO;
 
namespace ServerInput
{
    public class ClientConnection
    {
        public Socket connection;
        private NetworkStream socketStream;
        private BinaryReader reader;
        private BinaryWriter writer;
 
        public string ip_server;
 
        public ClientConnection(Socket _connection)
        {
            connection = _connection;
            socketStream = new NetworkStream(connection);
            reader = new BinaryReader(socketStream);
            writer = new BinaryWriter(socketStream);
            ip_server = ((IPEndPoint)connection.LocalEndPoint).Address.ToString();
            Send("Server (" + ip_server + "): успешное подключение \n"); //отправляем клиенту сообщение об подключении
            Thread startListen = new Thread(new ThreadStart(Receive));
            startListen.Start();
        }
 
 
        public void Stop()
        {
            writer.Close();
            reader.Close();
            socketStream.Close();
            connection.Close();
        }
 
        //отправляем данные на клиент
        public void Send(string str)
        {
            try
            {
                writer.Write(str);
            }
            catch (SocketException e)
            {
                MessageBox.Show(e.ToString());
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }
 
        //получаем данные на сервер (постоянно)
        public void Receive()
        {
            try
            {
                string theReply = "";
                do
                {
                    try
                    {
                        theReply = reader.ReadString();
                        //здесь обрабатываем полученное сообщение
                    }
                    catch (IOException e)
                    {
                        SocketException ee = (SocketException)e.InnerException;
                        if (ee.ErrorCode == 10053) //обрабатываем исключение при выключении сервера
                        {
                            return;
                        }
                    }
                    catch (Exception e)
                    {
                    }
                }
                while (connection.Connected);
                Stop();
            }
            catch
            {
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.8 из 5
Похожие ответы