Одновременное подключение несколько клиентов к одному серверу - 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 { } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д