非同期オブジェクト送信にアプローチする最良の方法を見つけようとしています。
私がやりたいことは、1 つのサーバーに接続するネットワーク接続 (5 ~ 10 クライアント) で同じアプリケーションの複数のインスタンスを開き、アプリケーションの 1 つがそのデータを更新するときに、その更新を他のすべてのアプリケーションに送信する必要があることです。インスタンス。
更新オブジェクトは次のようになります。
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
を受信したら、データを の他のすべてのソケットに転送する必要があります_clinets
が、どうすればよいですか? クライアントが接続を終了したことをどこでどのように検出すればよいですか?
また、クライアントは、サーバーにデータを送信するだけでなく、サーバーから受信するデータをリッスンする必要があります。そのすべてを 1 つのソケットで処理できますか、それとも 2 つ使用する必要がありますか?
助けてくれてありがとう!