我试图找出处理异步对象传输的最佳方法。
我想要做的是通过连接到一台服务器的网络连接(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);
}
}
但是服务器应该如何处理数据传输呢?
我知道我应该尝试从 in 的所有套接字_clients
接收数据,一旦我接收到数据,我需要将其转发到 in 的所有其他套接字_clinets
,但我应该怎么做呢?我应该如何以及在哪里检测客户端何时终止其连接?
此外,客户端应该监听从服务器接收的数据以及向服务器发送数据。我可以用一个插座处理所有这些,还是应该使用 2 个?
谢谢你的帮助!