Я пытаюсь выяснить, как лучше всего подходить к передаче асинхронных объектов.
Я хочу открыть несколько экземпляров одного и того же приложения через сетевое подключение (5-10 клиентов), котороеподключиться к одному серверу, и когда одно из приложений обновляет свои данные, мне нужно передать это обновление всем остальным экземплярам.
Объекты обновления будут похожи на это:
public class UpdateData
{
public double Angle { get; set; }
public double Azimuth { get; set; }
public Point Position { get; set; }
public Guid ObjectGuid { get; set; }
}
Данные не будут очень большими, но объекты этого типа будут передаваться примерно 10-50 раз в секунду от каждого клиента всем остальным клиентам.
Каков наилучший способ обработки этого видапередача данных?
Я думал о том, чтобы серверный объект прослушивал и принимал соединения, используя что-то похожее на это:
private void BtConnectClick(object sender, EventArgs e)
{
int port;
if (!int.TryParse(tbPort.Text, out port))
{
MessageBox.Show("Please enter a valid port into the textbox");
tbPort.Text = "";
return;
}
try
{
_listener = new TcpListener(IPAddress.Any, port);
_listener.Start();
_listener.BeginAcceptSocket(OnClientConnect, _listener);
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}
public void OnClientConnect(IAsyncResult asyn)
{
try
{
var s = _listener.EndAcceptSocket(asyn);
_clients.Add(s); // List<Socket> object
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}
Но как сервер должен обрабатывать передачу данных?
Я знаю, что должен пытаться получать данные из всех сокетов в _clients
, и как только я получу данные, мне нужно перенаправить их на все остальные, поэтомуckets в _clinets
, но как мне это сделать?Как и где я должен определить, когда клиент разорвал соединение?
Кроме того, клиенты должны прослушивать данные, которые будут получены с сервера, а также отправлять данные на сервер.Могу ли я справиться со всем этим с помощью одного разъема или использовать 2?
Спасибо за любую помощь!