Aracılığıyla paylaş


UDP hizmetlerini kullanma

sınıfı, UdpClient UDP kullanarak ağ hizmetleriyle iletişim kurar. UdpClient sınıfının özellikleri ve yöntemleri, UDP kullanarak veri istemek ve almak için bir Socket oluşturmanın ayrıntılarını soyutlar.

Kullanıcı Veri Birimi Protokolü (UDP), uzak bir konağa veri teslim etmek için en iyi çabayı gösteren basit bir protokoldür. Ancak, UDP protokolü bağlantısız bir protokol olduğundan, uzak uç noktaya gönderilen UDP veri birimlerinin hem ulaşması garanti edilmez hem de gönderildikleri sırayla gelmeleri garanti edilmez. UDP kullanan uygulamalar eksik, yinelenen ve sıra dışı veri birimlerini işlemeye hazır olmalıdır.

UDP kullanarak bir veri birimi göndermek için, ihtiyacınız olan hizmeti barındıran ağ cihazının ağ adresini ve hizmetin iletişim kurmak için kullandığı UDP bağlantı noktası numarasını bilmeniz gerekir. İnternet Atanan Numaralar Yetkilisi (IANA), ortak hizmetler için bağlantı noktası numaralarını tanımlar (bkz . Hizmet Adı ve Aktarım Protokolü Bağlantı Noktası Numarası Kayıt Defteri). IANA listesinde bulunmayan hizmetlerin 1.024 ile 65.535 arasında bağlantı noktası numaraları olabilir.

Özel ağ adresleri, IP tabanlı ağlarda UDP yayın iletilerini desteklemek için kullanılır. Aşağıdaki tartışmada örnek olarak İnternet'te kullanılan IP sürüm 4 adres ailesi kullanılmıştır.

IP sürüm 4 adresleri, bir ağ adresi belirtmek için 32 bit kullanır. 255.255.255.0 netmask kullanan C sınıfı adresler için bu bitler dört sekizliye ayrılır. Ondalık olarak ifade edildiğinde dört sekizli, 192.168.100.2 gibi tanıdık noktalı dörtlü gösterimini oluşturur. İlk iki sekizli (bu örnekte 192.168) ağ numarasını oluşturur, üçüncü sekizli (100) alt ağı tanımlar ve son sekizli (2) konak tanımlayıcısıdır.

Ip adresinin tüm bitlerini bir veya 255.255.255.255 olarak ayarlamak sınırlı yayın adresini oluşturur. Bu adrese bir UDP veri birimi göndermek, iletiyi yerel ağ segmentindeki herhangi bir konağa teslim eder. Yönlendiriciler hiçbir zaman bu adrese gönderilen iletileri iletmediğinden, yayın iletisini yalnızca ağ kesimindeki konaklar alır.

Yayınlar, ana bilgisayar tanımlayıcısının tüm bitleri ayarlanarak ağın belirli bölümlerine yönlendirilebilir. Örneğin, ağdaki 192.168.1 ile başlayan IP adresleriyle tanımlanan tüm konaklara yayın göndermek için 192.168.1.255 adresini kullanın.

Aşağıdaki kod örneği, 11.000 numaralı bağlantı noktasında UDP veri birimlerini dinlemek için bir UdpClient kullanır. İstemci bir ileti dizesi alır ve iletiyi konsola yazar.

Imports System.Net
Imports System.Net.Sockets
Imports System.Text

Public Class UDPListener
   Private Const listenPort As Integer = 11000

   Private Shared Sub StartListener()
      Dim listener As New UdpClient(listenPort)
      Dim groupEP As New IPEndPoint(IPAddress.Any, listenPort)
      Try
         While True
            Console.WriteLine("Waiting for broadcast")
            Dim bytes As Byte() = listener.Receive(groupEP)
            Console.WriteLine("Received broadcast from {0} :", groupEP)
            Console.WriteLine(Encoding.ASCII.GetString(bytes, 0, bytes.Length))
         End While
      Catch e As SocketException
         Console.WriteLine(e)
      Finally
         listener.Close()
      End Try
   End Sub 'StartListener

   Public Shared Sub Main()
      StartListener()
   End Sub 'Main
End Class 'UDPListener
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

public class UDPListener
{
    private const int listenPort = 11000;

    private static void StartListener()
    {
        UdpClient listener = new UdpClient(listenPort);
        IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);

        try
        {
            while (true)
            {
                Console.WriteLine("Waiting for broadcast");
                byte[] bytes = listener.Receive(ref groupEP);

                Console.WriteLine($"Received broadcast from {groupEP} :");
                Console.WriteLine($" {Encoding.ASCII.GetString(bytes, 0, bytes.Length)}");
            }
        }
        catch (SocketException e)
        {
            Console.WriteLine(e);
        }
        finally
        {
            listener.Close();
        }
    }

    public static void Main()
    {
        StartListener();
    }
}

Aşağıdaki kod örneği, Socket kullanarak 11.000 numaralı bağlantı noktası üzerinden UDP veri birimlerini 192.168.1.255 yönlendirilmiş yayın adresine gönderir. İstemci, komut satırında belirtilen ileti dizesini gönderir.

Imports System.Net
Imports System.Net.Sockets
Imports System.Text

Public Class Program
    Public Shared Sub Main(args() As [String])
      Dim s As New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
      s.EnableBroadcast = True
      Dim broadcast As IPAddress = IPAddress.Parse("192.168.1.255")
      Dim sendbuf As Byte() = Encoding.ASCII.GetBytes(args(0))
      Dim ep As New IPEndPoint(broadcast, 11000)
      s.SendTo(sendbuf, ep)
      Console.WriteLine("Message sent to the broadcast address")
   End Sub 'Main
End Class
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        s.EnableBroadcast = true;

        IPAddress broadcast = IPAddress.Parse("192.168.1.255");

        byte[] sendbuf = Encoding.ASCII.GetBytes(args[0]);
        IPEndPoint ep = new IPEndPoint(broadcast, 11000);

        s.SendTo(sendbuf, ep);

        Console.WriteLine("Message sent to the broadcast address");
    }
}

Ayrıca bkz.