Одновременное подключение несколько клиентов к одному серверу - C#
Формулировка задачи:
Столкнулся с задачей. Есть сервер, который отправляет xml сообщения на клиент. Нужно сделать чтобы могло подключиться несколько клиентов к моему серверу. Чтобы они все получали мои файлы.
Делал вот так:
отправляю вот так:
Отправка происходит после формирования 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();
Решение задачи: «Одновременное подключение несколько клиентов к одному серверу»
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
- {
- }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д