UdpClient.JoinMulticastGroup Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee voegt u een UdpClient toe aan een multicast-groep.
Overloads
| Name | Description |
|---|---|
| JoinMulticastGroup(IPAddress) |
Hiermee voegt u een UdpClient toe aan een multicast-groep. |
| JoinMulticastGroup(Int32, IPAddress) |
Hiermee voegt u een UdpClient toe aan een multicast-groep. |
| JoinMulticastGroup(IPAddress, Int32) |
Voegt een UdpClient toe aan een multicastgroep met de opgegeven TTL (Time to Live). |
| JoinMulticastGroup(IPAddress, IPAddress) |
Hiermee voegt u een UdpClient toe aan een multicast-groep. |
JoinMulticastGroup(IPAddress)
Hiermee voegt u een UdpClient toe aan een multicast-groep.
public:
void JoinMulticastGroup(System::Net::IPAddress ^ multicastAddr);
public void JoinMulticastGroup(System.Net.IPAddress multicastAddr);
member this.JoinMulticastGroup : System.Net.IPAddress -> unit
Public Sub JoinMulticastGroup (multicastAddr As IPAddress)
Parameters
Uitzonderingen
De onderliggende Socket waarde is gesloten.
Er is een fout opgetreden bij het openen van de socket.
Het IP-adres is niet compatibel met de AddressFamily waarde die het adresseringsschema van de socket definieert.
Voorbeelden
In het volgende codevoorbeeld ziet u hoe u kunt deelnemen aan een multicast-groep door een multicast-adres op te geven.
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.IO;
using System.Threading;
namespace Mssc.TransportProtocols.Utilities
{
// The following Receive class is used by both the ClientOriginator and
// the ClientTarget class to receive data from one another..
public class Receive
{
// The following static method performs the actual data
// exchange. In particular, it performs the following tasks:
// 1)Establishes a communication endpoint.
// 2)Receive data through this end point on behalf of the
// caller.
// 3) Returns the received data in ASCII format.
public static string ReceiveUntilStop(UdpClient c)
{
String strData = "";
String Ret = "";
ASCIIEncoding ASCII = new ASCIIEncoding();
// Establish the communication endpoint.
IPEndPoint endpoint = new IPEndPoint(IPAddress.IPv6Any, 50);
while (!strData.Equals("Over"))
{
Byte[] data = c.Receive(ref endpoint);
strData = ASCII.GetString(data);
Ret += strData + "\n";
}
return Ret;
}
}
// The following Send class is used by both the ClientOriginator and
// ClientTarget classes to send data to one another.
public class Send
{
private static char[] greetings = { 'H', 'e', 'l', 'l', 'o', ' ',
'T', 'a', 'r', 'g', 'e', 't', '.' };
private static char[] nice = { 'H', 'a', 'v', 'e', ' ', 'a', ' ', 'n', 'i',
'c', 'e', ' ', 'd', 'a', 'y', '.' };
private static char [] eom = { 'O', 'v', 'e', 'r'};
private static char[] tGreetings = { 'H', 'e', 'l', 'l', 'o', ' ',
'O', 'r', 'i', 'g', 'i', 'n', 'a', 't', 'o', 'r', '!' };
private static char[] tNice = { 'Y', 'o', 'u', ' ', 't', 'o', 'o', '.'};
// The following static method sends data to the ClientTarget on
// behalf of the ClientOriginator.
public static void OriginatorSendData(UdpClient c, IPEndPoint ep)
{
Console.WriteLine(new string(greetings));
c.Send(GetByteArray(greetings), greetings.Length, ep);
Thread.Sleep(1000);
Console.WriteLine(new String(nice));
c.Send(GetByteArray(nice), nice.Length, ep);
Thread.Sleep(1000);
Console.WriteLine(new String(eom));
c.Send(GetByteArray(eom), eom.Length, ep);
}
// The following static method sends data to the ClientOriginator on
// behalf of the ClientTarget.
public static void TargetSendData(UdpClient c, IPEndPoint ep)
{
Console.WriteLine(new string(tGreetings));
c.Send(GetByteArray(tGreetings), tGreetings.Length, ep);
Thread.Sleep(1000);
Console.WriteLine(new String(tNice));
c.Send(GetByteArray(tNice), tNice.Length, ep);
Thread.Sleep(1000);
Console.WriteLine(new String(eom));
c.Send(GetByteArray(eom), eom.Length, ep);
}
// Internal utility
private static Byte[] GetByteArray(Char[] ChArray)
{
Byte[] Ret = new Byte[ChArray.Length];
for (int i = 0; i < ChArray.Length; i++)
Ret[i] = (Byte) ChArray[i];
return Ret;
}
}
// The ClientTarget class is the receiver of the ClientOriginator
// messages. The StartMulticastConversation method contains the
// logic for exchanging data between the ClientTarget and its
// counterpart ClientOriginator in a multicast operation.
public class ClientTarget
{
private static UdpClient m_ClientTarget;
private static IPAddress m_GrpAddr;
// The following StartMulticastConversation method connects the UDP
// ClientTarget with the ClientOriginator.
// It performs the following main tasks:
// 1)Creates a UDP client to receive data on a specific port and using
// IPv6 addresses. The port is the same one used by the ClientOriginator
// to define its communication endpoint.
// 2)Joins or creates a multicast group at the specified address.
// 3)Defines the endpoint port to send data to the ClientOriginator.
// 4)Receives data from the ClientOriginator until the end of the
// communication.
// 5)Sends data to the ClientOriginator.
// Note this method is the counterpart of the
// ClientOriginator.ConnectOriginatorAndTarget().
public static void StartMulticastConversation()
{
string Ret;
// Bind and listen on port 1000. Specify the IPv6 address family type.
m_ClientTarget = new UdpClient(1000, AddressFamily.InterNetworkV6);
// Join or create a multicast group
m_GrpAddr = IPAddress.Parse("FF01::1");
// Use the overloaded JoinMulticastGroup method.
// Refer to the ClientOriginator method to see how to use the other
// methods.
m_ClientTarget.JoinMulticastGroup(m_GrpAddr);
// Define the endpoint data port. Note that this port number
// must match the ClientOriginator UDP port number which is the
// port on which the ClientOriginator is receiving data.
IPEndPoint ClientOriginatordest = new IPEndPoint(m_GrpAddr, 2000);
// Receive data from the ClientOriginator.
Ret = Receive.ReceiveUntilStop(m_ClientTarget);
Console.WriteLine("\nThe ClientTarget received: " + "\n\n" + Ret + "\n");
// Done receiving, now respond to the ClientOriginator.
// Wait to make sure the ClientOriginator is ready to receive.
Thread.Sleep(2000);
Console.WriteLine("\nThe ClientTarget sent:\n");
Send.TargetSendData(m_ClientTarget, ClientOriginatordest);
// Exit the multicast conversation.
m_ClientTarget.DropMulticastGroup(m_GrpAddr);
}
}
// The following ClientOriginator class starts the multicast conversation
// with the ClientTarget class..
// It performs the following main tasks:
// 1)Creates a socket and binds it to the port on which to communicate.
// 2)Specifies that the connection must use an IPv6 address.
// 3)Joins or create a multicast group.
// Note that the multicast address ranges to use are specified
// in the RFC#2375.
// 4)Defines the endpoint to send the data to and starts the
// client target (ClientTarget) thread.
public class ClientOriginator
{
private static UdpClient clientOriginator;
private static IPAddress m_GrpAddr;
private static IPEndPoint m_ClientTargetdest;
private static Thread m_t;
// The ConnectOriginatorAndTarget method connects the
// ClientOriginator with the ClientTarget.
// It performs the following main tasks:
// 1)Creates a UDP client to receive data on a specific port
// using IPv6 addresses.
// 2)Joins or create a multicast group at the specified address.
// 3)Defines the endpoint port to send data to on the ClientTarget.
// 4)Starts the ClientTarget thread that also creates the ClientTarget object.
// Note this method is the counterpart of the
// ClientTarget.StartMulticastConversation().
public static bool ConnectOriginatorAndTarget()
{
try
{
// Bind and listen on port 2000. This constructor creates a socket
// and binds it to the port on which to receive data. The family
// parameter specifies that this connection uses an IPv6 address.
clientOriginator = new UdpClient(2000, AddressFamily.InterNetworkV6);
// Join or create a multicast group. The multicast address ranges
// to use are specified in RFC#2375. You are free to use
// different addresses.
// Transform the string address into the internal format.
m_GrpAddr = IPAddress.Parse("FF01::1");
// Display the multicast address used.
Console.WriteLine("Multicast Address: [" + m_GrpAddr.ToString() + "]");
// Exercise the use of the IPv6MulticastOption.
Console.WriteLine("Instantiate IPv6MulticastOption(IPAddress)");
// Instantiate IPv6MulticastOption using one of the
// overloaded constructors.
IPv6MulticastOption ipv6MulticastOption = new IPv6MulticastOption(m_GrpAddr);
// Store the IPAdress multicast options.
IPAddress group = ipv6MulticastOption.Group;
long interfaceIndex = ipv6MulticastOption.InterfaceIndex;
// Display IPv6MulticastOption properties.
Console.WriteLine("IPv6MulticastOption.Group: [" + group + "]");
Console.WriteLine("IPv6MulticastOption.InterfaceIndex: [" + interfaceIndex + "]");
// Instantiate IPv6MulticastOption using another
// overloaded constructor.
IPv6MulticastOption ipv6MulticastOption2 = new IPv6MulticastOption(group, interfaceIndex);
// Store the IPAdress multicast options.
group = ipv6MulticastOption2.Group;
interfaceIndex = ipv6MulticastOption2.InterfaceIndex;
// Display the IPv6MulticastOption2 properties.
Console.WriteLine("IPv6MulticastOption.Group: [" + group + "]");
Console.WriteLine("IPv6MulticastOption.InterfaceIndex: [" + interfaceIndex + "]");
// Join the specified multicast group using one of the
// JoinMulticastGroup overloaded methods.
clientOriginator.JoinMulticastGroup((int)interfaceIndex, group);
// Define the endpoint data port. Note that this port number
// must match the ClientTarget UDP port number which is the
// port on which the ClientTarget is receiving data.
m_ClientTargetdest = new IPEndPoint(m_GrpAddr, 1000);
// Start the ClientTarget thread so it is ready to receive.
m_t = new Thread(new ThreadStart(ClientTarget.StartMulticastConversation));
m_t.Start();
// Make sure that the thread has started.
Thread.Sleep(2000);
return true;
}
catch (Exception e)
{
Console.WriteLine("[ClientOriginator.ConnectClients] Exception: " + e.ToString());
return false;
}
}
// The SendAndReceive performs the data exchange
// between the ClientOriginator and the ClientTarget classes.
public static string SendAndReceive()
{
string Ret = "";
// Send data to ClientTarget.
Console.WriteLine("\nThe ClientOriginator sent:\n");
Send.OriginatorSendData(clientOriginator, m_ClientTargetdest);
// Receive data from ClientTarget
Ret = Receive.ReceiveUntilStop(clientOriginator);
// Stop the ClientTarget thread
m_t.Abort();
// Abandon the multicast group.
clientOriginator.DropMulticastGroup(m_GrpAddr);
return Ret;
}
//This is the console application entry point.
public static void Main()
{
// Join the multicast group.
if (ConnectOriginatorAndTarget())
{
// Perform a multicast conversation with the ClientTarget.
string Ret = SendAndReceive();
Console.WriteLine("\nThe ClientOriginator received: " + "\n\n" + Ret);
}
else
{
Console.WriteLine("Unable to Join the multicast group");
}
}
}
}
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.IO
Imports System.Threading
' The following Receive class is used by both the ClientOriginator and
' the ClientTarget class to receive data from one another..
Public Class Receive
' The following static method performs the actual data
' exchange. In particular, it performs the following tasks:
' 1)Establishes a communication endpoint.
' 2)Receive data through this end point on behalf of the
' caller.
' 3) Returns the received data in ASCII format.
Public Shared Function ReceiveUntilStop(c As UdpClient) As String
Dim strData As [String] = ""
Dim Ret As [String] = ""
Dim ASCII As New ASCIIEncoding()
' Establish the communication endpoint.
Dim endpoint As New IPEndPoint(IPAddress.IPv6Any, 50)
While Not strData.Equals("Over")
Dim data As [Byte]() = c.Receive(endpoint)
strData = ASCII.GetString(data)
Ret += strData + ControlChars.Lf
End While
Return Ret
End Function 'ReceiveUntilStop
End Class
' The following Send class is used by both the ClientOriginator and
' ClientTarget classes to send data to one another.
Public Class Send
Private Shared greetings As Char() = {"H"c, "e"c, "l"c, "l"c, "o"c, " "c, "T"c, "a"c, "r"c, "g"c, "e"c, "t"c, "."c}
Private Shared nice As Char() = {"H"c, "a"c, "v"c, "e"c, " "c, "a"c, " "c, "n"c, "i"c, "c"c, "e"c, " "c, "d"c, "a"c, "y"c, "."c}
Private Shared eom As Char() = {"O"c, "v"c, "e"c, "r"c}
Private Shared tGreetings As Char() = {"H"c, "e"c, "l"c, "l"c, "o"c, " "c, "O"c, "r"c, "i"c, "g"c, "i"c, "n"c, "a"c, "t"c, "o"c, "r"c, "!"c}
Private Shared tNice As Char() = {"Y"c, "o"c, "u"c, " "c, "t"c, "o"c, "o"c, "."c}
' The following static method sends data to the ClientTarget on
' behalf of the ClientOriginator.
Public Shared Sub OriginatorSendData(c As UdpClient, ep As IPEndPoint)
Console.WriteLine(New String(greetings))
c.Send(GetByteArray(greetings), greetings.Length, ep)
Thread.Sleep(1000)
Console.WriteLine(New [String](nice))
c.Send(GetByteArray(nice), nice.Length, ep)
Thread.Sleep(1000)
Console.WriteLine(New [String](eom))
c.Send(GetByteArray(eom), eom.Length, ep)
End Sub
' The following static method sends data to the ClientOriginator on
' behalf of the ClientTarget.
Public Shared Sub TargetSendData(c As UdpClient, ep As IPEndPoint)
Console.WriteLine(New String(tGreetings))
c.Send(GetByteArray(tGreetings), tGreetings.Length, ep)
Thread.Sleep(1000)
Console.WriteLine(New [String](tNice))
c.Send(GetByteArray(tNice), tNice.Length, ep)
Thread.Sleep(1000)
Console.WriteLine(New [String](eom))
c.Send(GetByteArray(eom), eom.Length, ep)
End Sub
' Internal utility
Public Shared Function GetByteArray(ChArray() As [Char]) As [Byte]()
Dim Ret(ChArray.Length) As [Byte]
Dim i As Integer
For i = 0 To ChArray.Length - 1
Ret(i) = AscW(ChArray(i))
Next i
Return Ret
End Function 'GetByteArray
End Class
' The ClientTarget class is the receiver of the ClientOriginator
' messages. The StartMulticastConversation method contains the
' logic for exchanging data between the ClientTarget and its
' counterpart ClientOriginator in a multicast operation.
Public Class ClientTarget
Private Shared m_ClientTarget As UdpClient
Private Shared m_GrpAddr As IPAddress
' The following StartMulticastConversation method connects the UDP
' ClientTarget with the ClientOriginator.
' It performs the following main tasks:
' 1)Creates a UDP client to receive data on a specific port and using
' IPv6 addresses. The port is the same one used by the ClientOriginator
' to define its communication endpoint.
' 2)Joins or creates a multicast group at the specified address.
' 3)Defines the endpoint port to send data to the ClientOriginator.
' 4)Receives data from the ClientOriginator until the end of the
' communication.
' 5)Sends data to the ClientOriginator.
' Note this method is the counterpart of the
' ClientOriginator.ConnectOriginatorAndTarget().
Public Shared Sub StartMulticastConversation()
Dim Ret As String
' Bind and listen on port 1000. Specify the IPv6 address family type.
m_ClientTarget = New UdpClient(1000, AddressFamily.InterNetworkV6)
' Join or create a multicast group
m_GrpAddr = IPAddress.Parse("FF01::1")
' Use the overloaded JoinMulticastGroup method.
' Refer to the ClientOriginator method to see how to use the other
' methods.
m_ClientTarget.JoinMulticastGroup(m_GrpAddr)
' Define the endpoint data port. Note that this port number
' must match the ClientOriginator UDP port number which is the
' port on which the ClientOriginator is receiving data.
Dim ClientOriginatordest As New IPEndPoint(m_GrpAddr, 2000)
' Receive data from the ClientOriginator.
Ret = Receive.ReceiveUntilStop(m_ClientTarget)
Console.WriteLine((ControlChars.Lf + "The ClientTarget received: " + ControlChars.Lf + ControlChars.Lf + Ret + ControlChars.Lf))
' Done receiving, now respond to the ClientOriginator.
' Wait to make sure the ClientOriginator is ready to receive.
Thread.Sleep(2000)
Console.WriteLine(ControlChars.Lf + "The ClientTarget sent:" + ControlChars.Lf)
Send.TargetSendData(m_ClientTarget, ClientOriginatordest)
' Exit the multicast conversation.
m_ClientTarget.DropMulticastGroup(m_GrpAddr)
End Sub
End Class
' The following ClientOriginator class starts the multicast conversation
' with the ClientTarget class..
' It performs the following main tasks:
' 1)Creates a socket and binds it to the port on which to communicate.
' 2)Specifies that the connection must use an IPv6 address.
' 3)Joins or create a multicast group.
' Note that the multicast address ranges to use are specified
' in the RFC#2375.
' 4)Defines the endpoint to send the data to and starts the
' client target (ClientTarget) thread.
Public Class ClientOriginator
Private Shared clientOriginator As UdpClient
Private Shared m_GrpAddr As IPAddress
Private Shared m_ClientTargetdest As IPEndPoint
Private Shared m_t As Thread
' The ConnectOriginatorAndTarget method connects the
' ClientOriginator with the ClientTarget.
' It performs the following main tasks:
' 1)Creates a UDP client to receive data on a specific port
' using IPv6 addresses.
' 2)Joins or create a multicast group at the specified address.
' 3)Defines the endpoint port to send data to on the ClientTarget.
' 4)Starts the ClientTarget thread that also creates the ClientTarget object.
' Note this method is the counterpart of the
' ClientTarget.StartMulticastConversation().
Public Shared Function ConnectOriginatorAndTarget() As Boolean
Try
' Bind and listen on port 2000. This constructor creates a socket
' and binds it to the port on which to receive data. The family
' parameter specifies that this connection uses an IPv6 address.
clientOriginator = New UdpClient(2000, AddressFamily.InterNetworkV6)
' Join or create a multicast group. The multicast address ranges
' to use are specified in RFC#2375. You are free to use
' different addresses.
' Transform the string address into the internal format.
m_GrpAddr = IPAddress.Parse("FF01::1")
' Display the multicast address used.
Console.WriteLine(("Multicast Address: [" + m_GrpAddr.ToString() + "]"))
' Exercise the use of the IPv6MulticastOption.
Console.WriteLine("Instantiate IPv6MulticastOption(IPAddress)")
' Instantiate IPv6MulticastOption using one of the
' overloaded constructors.
Dim ipv6MulticastOption As New IPv6MulticastOption(m_GrpAddr)
' Store the IPAdress multicast options.
Dim group As IPAddress = ipv6MulticastOption.Group
Dim interfaceIndex As Long = ipv6MulticastOption.InterfaceIndex
' Display IPv6MulticastOption properties.
Console.WriteLine(("IPv6MulticastOption.Group: [" + group.ToString() + "]"))
Console.WriteLine(("IPv6MulticastOption.InterfaceIndex: [" + interfaceIndex.ToString() + "]"))
' Instantiate IPv6MulticastOption using another
' overloaded constructor.
Dim ipv6MulticastOption2 As New IPv6MulticastOption(group, interfaceIndex)
' Store the IPAdress multicast options.
group = ipv6MulticastOption2.Group
interfaceIndex = ipv6MulticastOption2.InterfaceIndex
' Display the IPv6MulticastOption2 properties.
Console.WriteLine(("IPv6MulticastOption.Group: [" + group.ToString() + "]"))
Console.WriteLine(("IPv6MulticastOption.InterfaceIndex: [" + interfaceIndex.ToString() + "]"))
' Join the specified multicast group using one of the
' JoinMulticastGroup overloaded methods.
clientOriginator.JoinMulticastGroup(Fix(interfaceIndex), group)
' Define the endpoint data port. Note that this port number
' must match the ClientTarget UDP port number which is the
' port on which the ClientTarget is receiving data.
m_ClientTargetdest = New IPEndPoint(m_GrpAddr, 1000)
' Start the ClientTarget thread so it is ready to receive.
m_t = New Thread(New ThreadStart(AddressOf ClientTarget.StartMulticastConversation))
m_t.Start()
' Make sure that the thread has started.
Thread.Sleep(2000)
Return True
Catch e As Exception
Console.WriteLine(("[ClientOriginator.ConnectClients] Exception: " + e.ToString()))
Return False
End Try
End Function 'ConnectOriginatorAndTarget
' The SendAndReceive performs the data exchange
' between the ClientOriginator and the ClientTarget classes.
Public Shared Function SendAndReceive() As String
Dim Ret As String = ""
' Send data to ClientTarget.
Console.WriteLine(ControlChars.Lf + "The ClientOriginator sent:" + ControlChars.Lf)
Send.OriginatorSendData(clientOriginator, m_ClientTargetdest)
' Receive data from ClientTarget
Ret = Receive.ReceiveUntilStop(clientOriginator)
' Stop the ClientTarget thread
m_t.Abort()
' Abandon the multicast group.
clientOriginator.DropMulticastGroup(m_GrpAddr)
Return Ret
End Function 'SendAndReceive
'This is the console application entry point.
Public Shared Sub Main()
' Join the multicast group.
If ConnectOriginatorAndTarget() Then
' Perform a multicast conversation with the ClientTarget.
Dim Ret As String = SendAndReceive()
Console.WriteLine((ControlChars.Lf + "The ClientOriginator received: " + ControlChars.Lf + ControlChars.Lf + Ret))
Else
Console.WriteLine("Unable to Join the multicast group")
End If
End Sub
End Class
Opmerkingen
De JoinMulticastGroup methode abonneert de UdpClient op een multicast-groep met behulp van de opgegeven IPAddress. Nadat de JoinMulticastGroup methode is aangeroepen, verzendt de onderliggende Socket waarde een IGMP-pakket (Internet Group Management Protocol) naar de router die lidmaatschap aanvraagt voor de multicast-groep. Het multicast-adresbereik is 224.0.0.0 tot 239.255.255.255. Als u een adres buiten dit bereik opgeeft of als de router waarnaar de aanvraag wordt gedaan niet multicast is ingeschakeld, UdpClient genereert u een SocketException. Als u een SocketException, gebruikt SocketException.ErrorCode om de specifieke foutcode te verkrijgen. Zodra u deze code hebt verkregen, kunt u de Windows Sockets versie 2 API-foutcode raadplegen voor een gedetailleerde beschrijving van de fout. Zodra de UdpClient router wordt vermeld als lid van de multicast-groep, kan deze multicasted datagrammen ontvangen die naar de opgegeven IPAddressworden verzonden.
Note
U moet het UdpClient gebruik van het multicastpoortnummer maken. Anders kunt u geen multicasted datagrammen ontvangen. Roep de Connect methode niet aan voordat u de JoinMulticastGroup methode aanroept, anders werkt de Receive methode niet. U hoeft geen deel uit te maken van een multicastgroep om datagrammen naar een multicast-IP-adres te verzenden.
Zorg ervoor dat de socket is gebonden aan de poort of het eindpunt voordat u deelneemt aan een multicastgroep. U doet dit door een van de constructors aan te roepen die een poort of eindpunt als parameter accepteren.
Als u het ontvangen van multicasted datagrammen wilt stoppen, roept u de DropMulticastGroup methode aan en geeft u de IPAddress groep op waaruit u wilt intrekken.
Note
In het IPv6-geval zijn er verschillende multicast-adresbereiken waaruit u kunt kiezen. Raadpleeg de IETF RFC 2375.
Note
U kunt een UdpClient samengestelde poort niet aanroepen zonder een specifieke lokale poort (dat wil gezegdJoinMulticastGroup, met behulp van de UdpClient() of UdpClient(AddressFamily) constructor).
Zie ook
Van toepassing op
JoinMulticastGroup(Int32, IPAddress)
Hiermee voegt u een UdpClient toe aan een multicast-groep.
public:
void JoinMulticastGroup(int ifindex, System::Net::IPAddress ^ multicastAddr);
public void JoinMulticastGroup(int ifindex, System.Net.IPAddress multicastAddr);
member this.JoinMulticastGroup : int * System.Net.IPAddress -> unit
Public Sub JoinMulticastGroup (ifindex As Integer, multicastAddr As IPAddress)
Parameters
- ifindex
- Int32
De interface-index die is gekoppeld aan het lokale IP-adres waarop de multicastgroep moet worden gekoppeld.
Uitzonderingen
De onderliggende Socket waarde is gesloten.
Er is een fout opgetreden bij het openen van de socket.
Voorbeelden
// Instantiate IPv6MulticastOption using another
// overloaded constructor.
IPv6MulticastOption ipv6MulticastOption2 = new IPv6MulticastOption(group, interfaceIndex);
// Store the IPAdress multicast options.
group = ipv6MulticastOption2.Group;
interfaceIndex = ipv6MulticastOption2.InterfaceIndex;
// Display the IPv6MulticastOption2 properties.
Console.WriteLine("IPv6MulticastOption.Group: [" + group + "]");
Console.WriteLine("IPv6MulticastOption.InterfaceIndex: [" + interfaceIndex + "]");
// Join the specified multicast group using one of the
// JoinMulticastGroup overloaded methods.
clientOriginator.JoinMulticastGroup((int)interfaceIndex, group);
' Instantiate IPv6MulticastOption using another
' overloaded constructor.
Dim ipv6MulticastOption2 As New IPv6MulticastOption(group, interfaceIndex)
' Store the IPAdress multicast options.
group = ipv6MulticastOption2.Group
interfaceIndex = ipv6MulticastOption2.InterfaceIndex
' Display the IPv6MulticastOption2 properties.
Console.WriteLine(("IPv6MulticastOption.Group: [" + group.ToString() + "]"))
Console.WriteLine(("IPv6MulticastOption.InterfaceIndex: [" + interfaceIndex.ToString() + "]"))
' Join the specified multicast group using one of the
' JoinMulticastGroup overloaded methods.
clientOriginator.JoinMulticastGroup(Fix(interfaceIndex), group)
Opmerkingen
Voordat u een multicast-groep gaat samenvoegen, moet u ervoor zorgen dat de socket is gebonden aan de poort of het eindpunt. U kunt dit doen door een van de constructors aan te roepen die een poort of eindpunt als parameter accepteren.
De infindex parameter wordt gebruikt om een hardware-interface op dezelfde koppeling te identificeren.
Note
Er zijn verschillende multicast-adresbereiken waaruit u kunt kiezen. Raadpleeg de IETF RFC 2375.
Note
U kunt een UdpClient samengestelde poort niet aanroepen zonder een specifieke lokale poort (dat wil gezegdJoinMulticastGroup, met behulp van de UdpClient.UdpClient() of UdpClient.UdpClient(AddressFamily) constructor).
Van toepassing op
JoinMulticastGroup(IPAddress, Int32)
Voegt een UdpClient toe aan een multicastgroep met de opgegeven TTL (Time to Live).
public:
void JoinMulticastGroup(System::Net::IPAddress ^ multicastAddr, int timeToLive);
public void JoinMulticastGroup(System.Net.IPAddress multicastAddr, int timeToLive);
member this.JoinMulticastGroup : System.Net.IPAddress * int -> unit
Public Sub JoinMulticastGroup (multicastAddr As IPAddress, timeToLive As Integer)
Parameters
- timeToLive
- Int32
De Time to Live (TTL), gemeten in routerhops.
Uitzonderingen
De opgegeven TTL ligt niet tussen 0 en 255
De onderliggende Socket waarde is gesloten.
Er is een fout opgetreden bij het openen van de socket.
multicastAddr is null.
Het IP-adres is niet compatibel met de AddressFamily waarde die het adresseringsschema van de socket definieert.
Voorbeelden
In het volgende voorbeeld ziet u hoe u een multicast-groep kunt koppelen door twee parameters, een multicastadres en een getal op te geven dat de TTL vertegenwoordigt.
UdpClient udpClient = new UdpClient();
// Creates an IPAddress to use to join and drop the multicast group.
IPAddress multicastIpAddress = IPAddress.Parse("239.255.255.255");
try{
// The packet dies after 50 router hops.
udpClient.JoinMulticastGroup(multicastIpAddress, 50);
}
catch ( Exception e ){
Console.WriteLine( e.ToString());
}
Dim udpClient As New UdpClient()
' Creates an IP address to use to join and drop the multicast group.
Dim multicastIpAddress As IPAddress = IPAddress.Parse("239.255.255.255")
Try
' The packet dies after 50 router hops.
udpClient.JoinMulticastGroup(multicastIpAddress, 50)
Catch e As Exception
Console.WriteLine(e.ToString())
End Try
Opmerkingen
De JoinMulticastGroup methode abonneert de UdpClient op een multicast-groep met behulp van de opgegeven IPAddress. Nadat de JoinMulticastGroup methode is aangeroepen, verzendt de onderliggende Socket waarde een IGMP-pakket (Internet Group Management Protocol) naar de router die lidmaatschap aanvraagt voor de multicast-groep. Het multicast-adresbereik is 224.0.0.0 tot 239.255.255.255. Als u een adres buiten dit bereik opgeeft of als de router waarnaar de aanvraag wordt gedaan niet multicast is ingeschakeld, UdpClient genereert u een SocketException. Als u een SocketException, gebruikt SocketException.ErrorCode om de specifieke foutcode te verkrijgen. Zodra u deze code hebt verkregen, kunt u de Windows Sockets versie 2 API-foutcode raadplegen voor een gedetailleerde beschrijving van de fout. De timeToLive parameter geeft aan hoeveel routerhops worden toegestaan voor een multicasted datagram voordat deze wordt verwijderd. Zodra de UdpClient router wordt vermeld als lid van de multicast-groep, kan deze multicasted datagrammen ontvangen die naar de opgegeven IPAddressworden verzonden.
Note
U moet het UdpClient gebruik van het multicastpoortnummer maken, anders kunt u geen multicasted datagrammen ontvangen. Roep de methode niet aan voordat u de ConnectJoinMulticastGroup methode aanroept of de ontvangstmethode werkt niet. U hoeft geen deel uit te maken van een multicastgroep om datagrammen naar een multicast-IP-adres te verzenden.
Voordat u een multicast-groep gaat samenvoegen, moet u ervoor zorgen dat de socket is gebonden aan de poort of het eindpunt. U doet dit door een van de constructors aan te roepen die accepteren als parameter een poort of een eindpunt.
Als u het ontvangen van multicasted datagrammen wilt stoppen, roept u de DropMulticastGroup methode aan en geeft u de IPAddress groep op waaruit u wilt intrekken.
Note
U kunt een UdpClient samengestelde poort niet aanroepen zonder een specifieke lokale poort (dat wil gezegdJoinMulticastGroup, met behulp van de UdpClient() of UdpClient(AddressFamily) constructor).
Zie ook
Van toepassing op
JoinMulticastGroup(IPAddress, IPAddress)
Hiermee voegt u een UdpClient toe aan een multicast-groep.
public:
void JoinMulticastGroup(System::Net::IPAddress ^ multicastAddr, System::Net::IPAddress ^ localAddress);
public void JoinMulticastGroup(System.Net.IPAddress multicastAddr, System.Net.IPAddress localAddress);
member this.JoinMulticastGroup : System.Net.IPAddress * System.Net.IPAddress -> unit
Public Sub JoinMulticastGroup (multicastAddr As IPAddress, localAddress As IPAddress)
Parameters
Uitzonderingen
De onderliggende Socket waarde is gesloten.
Er is een fout opgetreden bij het openen van de socket.
Voorbeelden
In het volgende codevoorbeeld ziet u het gebruik van de JoinMulticastGroup methode.
// Subscribe to a multicast group.
public static void DoJoinMulticastGroup(UdpClient u, string mcast)
{
IPAddress[] multicastAddress = Dns.GetHostAddresses(mcast);
u.JoinMulticastGroup(multicastAddress[0]);
Console.WriteLine("Joined multicast Address {0}",
multicastAddress[0]);
}
Opmerkingen
Voordat u deelneemt aan een multicast-groep, moet u ervoor zorgen dat de socket is gebonden aan de poort of het eindpunt. U kunt dit doen door een van de constructors aan te roepen die een poort of eindpunt als parameter accepteren.
Note
Er zijn verschillende multicast-adresbereiken waaruit u kunt kiezen. U vindt ze in de IETF RFC 2375.
Note
U kunt een UdpClient samengestelde poort niet aanroepen zonder een specifieke lokale poort (dat wil gezegdJoinMulticastGroup, met behulp van de UdpClient() of UdpClient(AddressFamily) constructor).