UdpClient.JoinMulticastGroup Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Добавляет группу UdpClient многоадресной рассылки.
Перегрузки
| Имя | Описание |
|---|---|
| JoinMulticastGroup(IPAddress) |
Добавляет группу UdpClient многоадресной рассылки. |
| JoinMulticastGroup(Int32, IPAddress) |
Добавляет группу UdpClient многоадресной рассылки. |
| JoinMulticastGroup(IPAddress, Int32) |
Добавляет группу UdpClient многоадресной рассылки с указанным временем жизни (TTL). |
| JoinMulticastGroup(IPAddress, IPAddress) |
Добавляет группу UdpClient многоадресной рассылки. |
JoinMulticastGroup(IPAddress)
- Исходный код:
- UDPClient.cs
- Исходный код:
- UDPClient.cs
- Исходный код:
- UDPClient.cs
- Исходный код:
- UDPClient.cs
- Исходный код:
- UDPClient.cs
Добавляет группу UdpClient многоадресной рассылки.
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)
Параметры
- multicastAddr
- IPAddress
Многоадресная рассылка IPAddress группы, к которой вы хотите присоединиться.
Исключения
Базовый Socket объект был закрыт.
При доступе к сокету произошла ошибка.
IP-адрес несовместим со AddressFamily значением, определяющим схему адресации сокета.
Примеры
В следующем примере кода показано, как присоединиться к группе многоадресной рассылки, предоставив адрес многоадресной рассылки.
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
Комментарии
Метод JoinMulticastGroup подписывается на UdpClient группу многоадресной рассылки с помощью указанного IPAddressметода. После вызова JoinMulticastGroup метода базовый Socket пакет отправляет пакет протокола управления группами Интернета (IGMP) маршрутизатору, запрашивающим членство в группе многоадресной рассылки. Диапазон адресов многоадресной рассылки — 224.0.0.0 до 239.255.255.255. Если указать адрес за пределами этого диапазона или маршрутизатор, к которому выполняется запрос, не включена многоадресная рассылка, UdpClient вызовет исключение SocketException. Если вы получаете SocketExceptionкод ошибки, используйте SocketException.ErrorCode для получения определенного кода ошибки. Получив этот код, вы можете обратиться к документации по коду ошибки API для сокетов Windows версии 2 для подробного описания ошибки. UdpClient После перечисления маршрутизатора в качестве члена группы многоадресной рассылки он сможет получать многоадресные диаграммы данных, отправленные в указанныйIPAddress.
Note
Необходимо создать UdpClient номер порта многоадресной рассылки. В противном случае вы не сможете получать многоадресные диаграммы данных. Не вызывайте Connect метод до вызова JoinMulticastGroup метода или Receive метод не будет работать. Вам не нужно принадлежать группе многоадресной рассылки для отправки диаграмм данных в IP-адрес многоадресной рассылки.
Перед присоединением к группе многоадресной рассылки убедитесь, что сокет привязан к порту или конечной точке. Для этого вызовите один из конструкторов, которые принимают порт или конечную точку в качестве параметра.
Чтобы остановить получение многоадресных диаграмм данных, вызовите DropMulticastGroup метод и укажите IPAddress группу, из которой вы хотите снять данные.
Note
В случае IPv6 можно выбрать несколько диапазонов адресов многоадресной рассылки. Пожалуйста, обратитесь к RFC 2375 IETF.
Note
Невозможно вызвать JoinMulticastGroupUdpClient созданный без определенного локального порта (т. еUdpClient(). с помощью конструктора).UdpClient(AddressFamily)
См. также раздел
Применяется к
JoinMulticastGroup(Int32, IPAddress)
- Исходный код:
- UDPClient.cs
- Исходный код:
- UDPClient.cs
- Исходный код:
- UDPClient.cs
- Исходный код:
- UDPClient.cs
- Исходный код:
- UDPClient.cs
Добавляет группу UdpClient многоадресной рассылки.
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)
Параметры
- ifindex
- Int32
Индекс интерфейса, связанный с локальным IP-адресом, на котором необходимо присоединиться к группе многоадресной рассылки.
- multicastAddr
- IPAddress
Многоадресная рассылка IPAddress группы, к которой вы хотите присоединиться.
Исключения
Базовый Socket объект был закрыт.
При доступе к сокету произошла ошибка.
Примеры
// 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)
Комментарии
Перед присоединением к группе многоадресной рассылки убедитесь, что сокет привязан к порту или конечной точке. Это можно сделать, вызвав один из конструкторов, который принимает порт или конечную точку в качестве параметра.
Параметр infindex используется для идентификации аппаратного интерфейса по той же ссылке.
Note
Выбор нескольких диапазонов адресов многоадресной рассылки. Обратитесь к RFC 2375 IETF.
Note
Невозможно вызвать JoinMulticastGroupUdpClient созданный без определенного локального порта (т. еUdpClient.UdpClient(). с помощью конструктора).UdpClient.UdpClient(AddressFamily)
Применяется к
JoinMulticastGroup(IPAddress, Int32)
- Исходный код:
- UDPClient.cs
- Исходный код:
- UDPClient.cs
- Исходный код:
- UDPClient.cs
- Исходный код:
- UDPClient.cs
- Исходный код:
- UDPClient.cs
Добавляет группу UdpClient многоадресной рассылки с указанным временем жизни (TTL).
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)
Параметры
- timeToLive
- Int32
Время жизни (TTL), измеряемое в прыжках маршрутизатора.
Исключения
Предоставленный TTL не составляет от 0 до 255
Базовый Socket объект был закрыт.
При доступе к сокету произошла ошибка.
multicastAddr равно null.
IP-адрес несовместим со AddressFamily значением, определяющим схему адресации сокета.
Примеры
В следующем примере показано, как присоединиться к группе многоадресной рассылки, указав два параметра, адрес многоадресной рассылки и число, представляющее TTL.
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
Комментарии
Метод JoinMulticastGroup подписывается на UdpClient группу многоадресной рассылки с помощью указанного IPAddressметода. После вызова JoinMulticastGroup метода базовый Socket пакет отправляет пакет протокола управления группами Интернета (IGMP) маршрутизатору, запрашивающим членство в группе многоадресной рассылки. Диапазон адресов многоадресной рассылки — 224.0.0.0 до 239.255.255.255. Если указать адрес за пределами этого диапазона или маршрутизатор, к которому выполняется запрос, не включена многоадресная рассылка, UdpClient вызовет исключение SocketException. Если вы получаете SocketExceptionкод ошибки, используйте SocketException.ErrorCode для получения определенного кода ошибки. Получив этот код, вы можете обратиться к документации по коду ошибки API для сокетов Windows версии 2 для подробного описания ошибки. Параметр timeToLive указывает, сколько прыжков маршрутизатора разрешено для многоадресной диаграммы данных перед удалением.
UdpClient После перечисления маршрутизатора в качестве члена группы многоадресной рассылки он сможет получать многоадресные диаграммы данных, отправленные в указанныйIPAddress.
Note
Необходимо создать UdpClient номер порта многоадресной рассылки, в противном случае вы не сможете получать многоадресные диаграммы данных. Не вызывайте Connect метод до вызова JoinMulticastGroup метода или метода получения не будет работать. Вам не нужно принадлежать группе многоадресной рассылки для отправки диаграмм данных в IP-адрес многоадресной рассылки.
Перед присоединением к группе многоадресной рассылки убедитесь, что сокет привязан к порту или конечной точке. Для этого вызовите один из конструкторов, которые принимают в качестве параметра порт или конечную точку.
Чтобы остановить получение многоадресных диаграмм данных, вызовите DropMulticastGroup метод и укажите IPAddress группу, из которой вы хотите снять данные.
Note
Невозможно вызвать JoinMulticastGroupUdpClient созданный без определенного локального порта (т. еUdpClient(). с помощью конструктора).UdpClient(AddressFamily)
См. также раздел
Применяется к
JoinMulticastGroup(IPAddress, IPAddress)
- Исходный код:
- UDPClient.cs
- Исходный код:
- UDPClient.cs
- Исходный код:
- UDPClient.cs
- Исходный код:
- UDPClient.cs
- Исходный код:
- UDPClient.cs
Добавляет группу UdpClient многоадресной рассылки.
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)
Параметры
- multicastAddr
- IPAddress
Многоадресная рассылка IPAddress группы, к которой вы хотите присоединиться.
Исключения
Базовый Socket объект был закрыт.
При доступе к сокету произошла ошибка.
Примеры
В следующем примере кода показано использование JoinMulticastGroup метода.
// 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]);
}
Комментарии
Перед присоединением к группе многоадресной рассылки убедитесь, что сокет привязан к порту или конечной точке. Это можно сделать, вызвав один из конструкторов, который принимает порт или конечную точку в качестве параметра.
Note
Выбор нескольких диапазонов адресов многоадресной рассылки. Их можно найти в RFC 2375 IETF.
Note
Невозможно вызвать JoinMulticastGroupUdpClient созданный без определенного локального порта (т. еUdpClient(). с помощью конструктора).UdpClient(AddressFamily)