UDP Healthmanager Serverupdate
-
Hallo zusammen
Ich habe hier einen kleinen Healthmanger und Healthagent auf UDP basis programmiert. Der Healthmanager waret auf eingehende verbindungen von den agenten und zeigt an ob diese aktiv sind. Jeder agent sendet dabei einen identifier "Server1","Server2" ect. welcher von dem Healthmanger erkannt wird. Auf der grundlage des identifiers und der aktuellen zeit werden Webserver-objekte angelegt.
Nun möchte ich das programm dahingehend optimieren, dass die aktiven Webserver instanzen durch den Healthmanager in eine liste aufgenommen werden. Sobald einer dieser agent kein signal mehr sendet, soll dieser aus der liste gelöscht werden. Zu jederzeit soll also eine frische liste angezeigt werden mit den aktiven servern, welche noch ein signal senden. Und genau hier ist der punkt wo ich nicht weiterkomme. Bin relativ neu im bereich netzwerk/socketprogrammierung.
Bin für jede hilfe dankbar.
Healthmanager
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net.Sockets; using System.Net; using System.Threading; namespace ConsoleApplication3 { class HealthMonitor { public static List<Webservers> getServers; static void Main(string[] args) { getServers = new List<Webservers>(); HealthMonitor h = new HealthMonitor(); Thread th = new Thread(new ThreadStart(h.start)); th.Start(); } public void start() { Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); int receive; //string message; byte[] data; //bind server to port 9050 IPEndPoint ipi = new IPEndPoint(IPAddress.Any, 9050); server.Bind(ipi); Console.WriteLine("Listen for clients: "); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint Remote = (EndPoint)(sender); while (true) { data = new byte[1024]; receive = server.ReceiveFrom(data, ref Remote); string sidentifier = Encoding.ASCII.GetString(data, 0, receive); DateTime serverdate = System.DateTime.Now; //Creates a new Webserver instance with date and time. Webservers web = new Webservers(); web.name = sidentifier; web.date = serverdate; Console.WriteLine("Received Message from client: "+web.name+" "+"Datetime: "+web.date); server.SendTo(data, receive, SocketFlags.None, Remote); } } } }
Webserver
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication3 { class Webservers { public string name{get;set;} public DateTime date { get; set;} } }
Healthagent
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; using System.Net.Sockets; using System.Net; namespace agent { class HealthAgent { static void Main(string[] args) { HealthAgent ha = new HealthAgent(); string argument = args[0]; ha.start(argument); } public void start(string argument) { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Unspecified); Console.WriteLine("Start sending data to localhost: "); IPEndPoint sip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050); while (true) { Thread.Sleep(1000); Console.WriteLine(argument.ToString()); byte[] data = ASCIIEncoding.ASCII.GetBytes(argument); s.SendTo(data, sip); } } } }