Одновременное подключение несколько клиентов к одному серверу - 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
{
}
}
}
}