2 Ekim 2017 Pazartesi

UdpClient Sınıfı - Her Sunucu Hem De İstemci Olabilir

Giriş
Bu sınıfı kullanmak için şu satırı dahil ederiz.
System.Net.Sockets.UdpClient
Kullanım
Sunucu için şöyle yaparız
using System.Net;
using System.Net.Sockets;
using System.Text;

var udpClient = new UdpClient(9001);
var endpoints = new HashSet<IPEndPoint>();
try
{
    while (true)
    {
        Log($"{DateTime.UtcNow:HH:mm:ss.fff}: Waiting to receive packet");
        var packet = await udpClient.ReceiveAsync();
        var buffer = packet.Buffer;
        var clientEndpoint = packet.RemoteEndPoint;
        endpoints.Add(clientEndpoint);
        Log($"Received {buffer.Length} bytes from {clientEndpoint}: 
          {Encoding.UTF8.GetString(buffer)}");
        foreach (var otherEndpoint in endpoints)
        {
            if (!otherEndpoint.Equals(clientEndpoint))
            {
                await udpClient.SendAsync(buffer, otherEndpoint);
            }
        }
    }
}
catch (Exception e)
{
    Log($"Failed: {e}");
}

void Log(string message) =>
    Console.WriteLine($"{DateTime.UtcNow:HH:mm:ss.fff}: {message}");
İstemci için şöyle yaparız
sing System.Net.Sockets;
using System.Text;

Guid clientId = Guid.NewGuid();
var client = new UdpClient();
Log("Connecting UdpClient");
client.Connect("127.0.0.1", 9001);
await client.SendAsync(Encoding.UTF8.GetBytes($"Hello from {clientId}"));
await Task.Delay(TimeSpan.FromSeconds(15));
await client.SendAsync(Encoding.UTF8.GetBytes($"Goodbye from {clientId}"));
client.Close();
Log("UdpClient closed");

void Log(string message) =>
    Console.WriteLine($"{DateTime.UtcNow:HH:mm:ss.fff}: {message}");
Constructor
Şöyle yaparız.
UdpClient udpClient = new UdpClient(1024);
BeginReceive metodu
Şöyle yaparız
udpClient.BeginReceive(ReceiveCallback, null);


void ReceiveCallback(IAsyncResult ar)
{
  IPEndPoint ip = ...;
  byte[] data = udpClient.EndReceive(ar, ref ip);

}
Close metodu
Şöyle yaparız.
udpClient.Close();
Connect metodu
Şöyle yaparız.
udpClient.Connect("a.b.c.d", 1024);
Send metodu
Şöyle yaparız.
byte[] messageBytes = ...;
udpClient.Send(messageBytes, messageBytes.Length);

Hiç yorum yok:

Yorum Gönder