Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az UdpClient osztály UDP használatával kommunikál a hálózati szolgáltatásokkal. Az UdpClient osztály tulajdonságai és metódusai elvonatkoztatják az UDP használatával történő adatkérés és -fogadás részleteit, amelyek a Socket létrehozásához szükségesek.
A User Datagram Protocol (UDP) egy egyszerű protokoll, amely mindent megtesz annak érdekében, hogy adatokat továbbítson egy távoli gazdagépnek. Mivel azonban az UDP protokoll kapcsolat nélküli protokoll, a távoli végpontra küldött UDP-adatgramok nem garantáltan érkeznek meg, és nem is garantáltan ugyanabba a sorrendbe érkeznek, amelyben a rendszer elküldi őket. Az UDP-t használó alkalmazásokat fel kell készíteni a hiányzó, duplikált és sorozaton kívüli adatgramok kezelésére.
A datagram UDP használatával történő küldéséhez ismernie kell a szükséges szolgáltatást üzemeltető hálózati eszköz hálózati címét és a szolgáltatás által a kommunikációhoz használt UDP-portszámot. Az Internet Assigned Numbers Authority (IANA) a gyakori szolgáltatások portszámait határozza meg (lásd : Szolgáltatásnév és Átviteli protokoll portszámjegyzéke). Az IANA-listán nem szereplő szolgáltatások portszáma 1 024 és 65 535 között lehet.
A speciális hálózati címek az IP-alapú hálózatok UDP-közvetítési üzeneteinek támogatására szolgálnak. Az alábbi vitafórum az interneten használt 4-es verziójú IP-címcsaládot használja példaként.
A 4-es verziójú IP-címek 32 bitet használnak a hálózati cím megadásához. A 255.255.255.0-s netmaszkot használó C osztálycímek esetében ezek a bitek négy oktettből állnak. Decimálisan kifejezve a négy oktett a jól ismert pontozott-negyed jelölést alkotja, például 192.168.100.2. Az első két oktett (ebben a példában 192.168) alkotja a hálózati számot, a harmadik oktett (100) határozza meg az alhálózatot, az utolsó oktett (2) pedig a gazdagép azonosítója.
Az IP-cím összes bitjének egy vagy 255.255.255.255-ös értékre állítása a korlátozott szórási címet adja meg. Ha UDP-adatgramot küld erre a címre, az üzenetet a helyi hálózati szegmens bármely gazdagépének kézbesíti. Mivel az útválasztók soha nem továbbítják az erre a címre küldött üzeneteket, csak a hálózati szegmensben lévő gazdagépek kapják meg a közvetítési üzenetet.
A közvetítések a hálózat adott részeire irányíthatók a gazdagépazonosító összes bitjének beállításával. Ha például a 192.168.1-től kezdődő IP-címek által azonosított összes kiszolgálónak szeretne közvetítést küldeni, használja a 192.168.1.255-ös címet.
Az alábbi példakód az UdpClient UDP-adatgramok figyelésére szolgál a 11 000-s porton. Az ügyfél kap egy üzenetsztringet, és megírja az üzenetet a konzolra.
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();
}
}
Az alábbi kódpélda a Socket használatával UDP-adatgramokat küld a 192.168.1.255-ös irányított szórási címre a 11 000-es porton. Az ügyfél elküldi a parancssorban megadott üzenetsztringet.
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");
}
}