Bonsoir à tous,
j'ai un soucis de compréhension concernant l'utilisation des socket UDP. J'tutilise d'ordinaire les socket TCP de cette façon :
Mon but est de faire la même chose en UDP, à savoir que plusieurs clients puissent envoyer des paquets à un client UDP.
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 #region Run public void Run() { while (true) { try { List<Socket> Read = new List<Socket>(); List<Socket> Write = new List<Socket>(); Read.Add(this.Socket); for (Int32 i = 0; i < this.Clients.Count; i++) { Read.Add(this.Clients.ElementAt(i).Key); if (!this.Clients.ElementAt(i).Value.IsEmpty()) Write.Add(this.Clients.ElementAt(i).Key); } Socket.Select(Read, Write, null, 5); for (Int32 i = 0; i < Read.Count; i++) { if (Read[i] == this.Socket) this.Accept(); else this.Read(this.Clients[Read[i]]); } for (Int32 i = 0; i < Write.Count; i++) this.Write(this.Clients[Write[i]]); this.ClearDisconnectedClients(); } catch (Exception E) { Log.Instance.Write("SERVER", "0.0.0.0", "void Run()", E.Message, System.Diagnostics.LogType.Fault); } } }
Pour le moment je fais comme ceci :
Le problème est que je ne sais pas comment envoyer des données et en même temps en recevoir (comme je faisais avec Socket.Select).
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 try { this.Socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint Server = new IPEndPoint(IPAddress.Any, 30000); this.Socket.Bind(Server); Int32 Length = 0; Byte[] Buffer = new byte[1024]; while (true) { IPEndPoint Clients = new IPEndPoint(IPAddress.Any, 0); EndPoint Sender = (EndPoint)Clients; Length = this.Socket.ReceiveFrom(Buffer, ref Sender); Buffer[Length] = 0; Console.WriteLine(Sender.ToString()); Console.WriteLine(Length); } } catch (Exception Ex) { Console.WriteLine(Ex.Message); }
Merci d'avance
Cordialement,
NeoKript
Partager