[c#] Socket UDP - gestion
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 :
Code:
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);
}
}
} |
Mon but est de faire la même chose en UDP, à savoir que plusieurs clients puissent envoyer des paquets à un client UDP.
Pour le moment je fais comme ceci :
Code:
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);
} |
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).
Merci d'avance
Cordialement,
NeoKript