C# İle Ağ Üzerinden Veri Alıp Yollamak(Broadcast Olarak)

Bu yazımızda sizlere C# ile UDP protokolü üzerinden broadcast veri iletişimini nasıl gerçekleştirebileceğinizi anlatacağım.

İlk olarak bize kolaylık sağlaması için 2 tane “console application” başlatıyoruz.

1. uygulama server

2. ise client olsun.

Socket ve IP sınıflarını kullanabilmemiz için

using System.Net;
using System.Net.Sockets;

Satırlarını eklememiz gerekiyor. Bunların dışında

using System;
using System.Text;

Satırları ise zaten eklemiş olarak gelecektir.

Ağ üzerinde bir port dinleyeceğimiz için bunu tanımlamamız gerekiyor bunun için main metodunun altına bu satırıda ekliyoruz.

private const int listenPort = 8000;

Böylelikle 8000 nolu portu dinleyeceğimizi bildireceğiz.

Ön ayarlamaları tamamladıktan sonra gelelim sunucumuzu başlatıp 8000 nolu portu dinlemeye.

    private static void StartListener()
    {
        bool done = false;

        UdpClient listener = new UdpClient(listenPort);
        IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);

        try
        {
            while (!done)
            {
                Console.WriteLine("Broadcast veri bekleniyor");
                byte[] bytes = listener.Receive(ref groupEP);

                Console.WriteLine("broadcast veri {0} :\n {1}\n", groupEP.ToString(), Encoding.UTF8.GetString(bytes, 0, bytes.Length));
            }

        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
        finally
        {
            listener.Close();
        }
    }

ve başlatmak için ise main metoduna

StartListener();

satırını eklememiz gerekiyor.
Burada dikkat etmemiz gereken nokta ise veriyi ağdaki tüm bilgisayarların görebilecek olması. Yani 3 farklı Sunucumuzun olduğunu varsayalım ve bize bir broadcast verinin geldiğini düşünelim. bu veriyi 3 Sunucuda görüp işleyebilecektir.

Server programımızı tamamladığımıza göre artık gelelim broadcast veriyi nasıl yollayabileceğimize.

Client programda da aynı isim uzaylarını tanımladıktan sonra main metoduna şu satırları eklememiz gerekiyor.

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

 

        int Port = 8000;

        Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

        byte[] sendbuf = Encoding.UTF8.GetBytes("<BroadCast Verimizi Tüm Sunucular Görebilir.>");
        IPEndPoint ep = new IPEndPoint(IPAddress.Broadcast, Port);

        s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
        s.SendTo(sendbuf, ep);

        Console.WriteLine("Mesaj yollandı");
        Console.ReadLine();

İstemci tarafında ise önemli nokta Sunucu ile iletişim kurabilmemiz için aynı portları kullanmamız gerekmekte.

Yazımızın sonuna gelmeden

IPEndPoint ep = new IPEndPoint(IPAddress.Broadcast, Port);

Satırını

IPEndPoint ep = new IPEndPoint("192.168.1.255", Port);

Gibi değiştirerek tüm ağ kartlarına değilde sadece tek bir ağa veri yollayabileceğimizide eklememiz gerekmekte.
Server tarafında ise bağlı tüm ağları değilde sadece tek bir ağı dinlemek için

IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);

Satırını

IPEndPoint groupEP = new IPEndPoint(IPAddress.Parse("192.168.1.50"), listenPort);

Olarak değiştirebiliriz.