Bonjour,
J'ai un projet, ou je dois mettre en écoute un port précis, pour que lorsque le serveur émet un message, celui ci apparaisse chez le client.
Je vais travailler sur un réseau de plusieurs millier de machine, j'ai donc opté pour utiliser le protocole UDP, qui me permet de mettre en écoute le port en local, sans avoir à me connecter à un serveur.
Pour le moment, voilà le code que j'ai :
//Client
//Serveur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 class Program { private const int listenPort = 11000; private static void StartListener() { bool done = false; UdpClient listener = new UdpClient(listenPort); IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort); try { while (!done) { Console.WriteLine("Waiting for broadcast"); byte[] bytes = listener.Receive(ref groupEP); Console.WriteLine("Received broadcast from {0} :\n {1}\n", groupEP.ToString(), Encoding.ASCII.GetString(bytes, 0, bytes.Length)); } } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { listener.Close(); } } static void Main(string[] args) { StartListener(); } }
J'aurai plusieurs question.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 class Program { private const int listenPort = 11000; private static void StartListener() { bool done = false; UdpClient listener = new UdpClient(listenPort); IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort); try { while (!done) { Console.WriteLine("Waiting for broadcast"); byte[] bytes = listener.Receive(ref groupEP); Console.WriteLine("Received broadcast from {0} :\n {1}\n", groupEP.ToString(), Encoding.ASCII.GetString(bytes, 0, bytes.Length)); } } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { listener.Close(); } } static void Main(string[] args) { StartListener(); } }
L'application doit tournée en arrière plan sans arrêt, sans consommer de ressource (ram ou autre), est-ce "compatible" avec la boucle while présente dans le code client ? Ou il faut la remplacer par quelque chose d'autre ?
J'aimerai stocké dans les logs, les postes qui n'ont pas reçu le message.
J'ai donc pensé, lorsque le client reçoit un message, il ré émet, à l'adresse IP qui viens de lui envoyer le message, un message. Sachant que les messages diffusé par le serveur seront émis par broadcast,
pensez vous que si tout les clients ré émettent en même temps, le serveur tombe ?
Il me faudra plusieurs Thread ? l'un en envoi l'autre en réception, côté serveur ?
Merci d'avance pour les réponses !
Partager