Esta classe é usada para enviar e receber pacotes IP multicast. Ele estende a classe DatagramSocket e fornece funcionalidade adicional para ingressar em grupos. Uma mensagem enviada ao endereço IP do grupo será recebida por todos os clientes que ingressaram no grupo. Deve-se ter em mente que para enviar pacotes ao grupo, o soquete de datagrama não precisa se juntar ao grupo, mas para receber os pacotes endereçados ao grupo, ele deve se juntar ao grupo. Esta classe fornece vários métodos para controlar o fluxo de pacotes multicast, como configurar o ttl, a interface de rede a ser usada, etc., junto com as principais funções de entrar e sair de um grupo.

Construtores:

  1. public MulticastSocket(): Cria um socket multicast. Ao usar este construtor, temos que definir explicitamente todos os campos, como endereço do grupo, número da porta, etc.
    Sintaxe: public MulticastSocket()
  2. public MulticastSocket (int port): Cria um socket multicast vinculado à porta especificada.
    Sintaxe: public MulticastSocket (int port) 
     Parâmetros:
    porta: número da porta para ligar este soquete
    
  3. public MulticastSocket (SocketAddress bindaddr): Cria um socket multicast e o vincula ao endereço de socket especificado. Cria um soquete não acoplado se o endereço for nulo.
    Sintaxe: public MulticastSocket (SocketAddress bindaddr) 
     Parâmetros:
    bindaddr: endereço de soquete para ligar este soquete
    

Métodos :

  1. setTTL (obsoleto): Usado para definir o tempo de vida dos pacotes enviados a partir desses sockets multicast, restringindo o escopo dos pacotes. Este método está obsoleto porque usa byte como parâmetro para definir TTL. setTimeToLive() é usado em seu lugar.
    Sintaxe: public void setTTL (byte ttl)
     Parâmetros:
    ttl: a hora de viver
    
  2. setTimeToLive(): Este método é usado no lugar do método acima, pois usa o valor int como parâmetro. O ttl especificado deve estar no intervalo 0 <= ttl <= 255, caso contrário, ilegalArgumentException será lançado.
    Sintaxe: public void setTimeToLive (int ttl)
     Parâmetros:
    ttl: a hora de viver
    
  3. getTTL (obsoleto): usado para obter o tempo padrão de vida para os pacotes enviados a partir desses sockets multicast
    Sintaxe: public byte getTTL()
    
  4. getTimeToLive(): Retorna o tempo padrão de vida para os pacotes enviados deste socket multicast.
    Sintaxe: public void getTimeToLive()
    
  5. joinGroup(): Usado para ingressar em um grupo multicast. Após ingressar no grupo, o cliente começará a receber todos os pacotes enviados para este endereço de grupo multicast. Este método usa InetAddress do grupo a ser ingressado. Outras alterações em seu comportamento podem ser feitas usando os métodos setInterface() e setNetworkInterface().
    Sintaxe: public void joinGroup (InetAddress mcastaddr)
                   lança IOException
    Parâmetros:
    mcastaddr: endereço multicast para ingressar
    Lança:
    IOException: se ocorrer um erro durante a adesão ou o endereço for
    não é um endereço multicast.
    

    Outro método sobrecarregado que também especifica a interface de rede a ser usada ao ingressar no grupo.

  6. Sintaxe: public void joinGroup (SocketAddress mcastaddr,
                 NetworkInterface netIf)
                   lança IOException
    Parâmetros:
    mcastaddr: endereço multicast para ingressar
    netIf: interface de rede a ser usada durante a conexão
    Lança:
    IOException: se ocorrer um erro durante a adesão ou o endereço for
    não é um endereço multicast.
    
  7. leaveGroup(): Usado para sair de um grupo multicast. Depois de deixar o grupo, o cliente não poderá mais receber os pacotes endereçados a este endereço de grupo.
    Sintaxe: public void leaveGroup (InetAddress mcastaddr)
                   lança IOException
    Parâmetros:
    mcastaddr: endereço multicast para sair
    Lança:
    IOException: se ocorrer erro ao sair
    

    Outro método sobrecarregado para deixar o grupo, que também permite a especificação da interface de rede na qual sair do grupo.



  8. Sintaxe: public void leaveGroup (SocketAddress mcastaddr,
                 NetworkInterface netIf)
                   lança IOException
    Parâmetros:
    mcastaddr: endereço multicast para sair
    netIf: interface de rede da qual sair
    Lança:
    IOException: se ocorrer erro ao sair
    
  9. setInterface(): Usado para definir a interface de rede multicast.
    Sintaxe: public void setInterface (InetAddress inf)
                      lança SocketException
    Parâmetros:
    inf: o endereço interno
    Lança:
    SocketException: se houver erro no protocolo subjacente
    
  10. getInterface(): Retorna a interface de rede usada para pacotes multicast.
    Sintaxe: public InetAddress getInterface()
                             lança SocketException
    Lança:
    SocketException: se houver erro no protocolo subjacente
    
  11. setNetworkInterface(): Usado para especificar a interface de rede para pacotes de saída neste socket.
    Sintaxe: public void setNetworkInterface (NetworkInterface netIf)
                             lança SocketException
    Parâmetros:
    netIf: interface de rede a ser usada
    Lança:
    SocketException: se houver erro no protocolo subjacente
    
  12. getNetworkInterface(): Retorna a interface de rede para pacotes de saída neste socket.
    Sintaxe: public NetworkInterface getNetworkInterface()
                                         lança SocketException
    Lança:
    SocketException: se houver erro no protocolo subjacente
    
  13. setLoopbackMode(): Usado para especificar se os pacotes multicast serão retornados ao socket local.
    Sintaxe: public void setLoopbackMode (boolean desabilitado)
                         lança SocketException
    Parâmetros:
    desativar: verdadeiro ou falso
    
  14. getLoopbackMode(): Retorna a configuração do modo de loopback.
    Sintaxe: public vboolean getLoopbackMode()
                         lança SocketException
    
  15. send() (obsoleto): Usado para enviar o pacote ao grupo multicast. Ele permite a especificação de ttl para o pacote de saída diferente do valor padrão especificado usando o método setTimeToLive(). Ele não altera este valor, mas usa o valor especificado apenas para o pacote atual. As linhas de código a seguir devem ser usadas no lugar desse método.
    int ttl = msock.getTimeToLive();
    msock.setTimeToLive (newttl);
    msock.send (pacote);
    msock.setTimetoLive (ttl);
    Sintaxe: public void send (DatagramPacket p,
                       byte ttl)
              lança IOException
    Parâmetros:
    p: pacote de datagrama para enviar
    ttl: hora de viver
    Lança:
    IOException: se ocorrer um erro durante a configuração do ttl
    

Implementação Java:

//Java program to illustrate various
//MulticastSocket class methods
import java.io.IOException;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.NetworkInterface;
import java.util.Enumeration;
  
public class multisock 
{
    public static void main(String[] args) throws IOException 
    {
          
        MulticastSocket ms = new MulticastSocket();
        InetAddress ip = InetAddress.getByName("224.168.1.124");
  
        // setTTL() method
        // this method is deprecated and instead
        // use setTimeToLive() method
        // Un-commenting below line would throw
        // a warning as the method is deprecated
        ms.setTTL((byte) 25);
  
        // setTimeToLive() method, will override
        // setting by setTTL() method
        ms.setTimeToLive(20);
  
        // getTTL() method
        // deprecated, so use getTimeToLive() method instead
        System.out.println("TTL : " + ms.getTTL());
  
        // getTimeToLive() method
        System.out.println("Time to Live : " + 
                             ms.getTimeToLive());
  
        NetworkInterface nif = NetworkInterface.getByIndex(1);
        Enumeration<InetAddress> enu = nif.getInetAddresses();
        InetAddress intadd = enu.nextElement();
  
        // setInterface() method
        ms.setInterface(intadd);
  
        // getInterface() method
        System.out.println("Interface : " + ms.getInterface());
  
        // setNetworkInterface() method
        ms.setNetworkInterface(nif);
  
        // getNetworkInterface() method
        System.out.println("Network Inteface : " + 
                           ms.getNetworkInterface());
  
        // setLoopbackMode() method
        ms.setLoopbackMode(true);
  
        // getLoopbackMode() method
        System.out.println("Loopback mode : " + 
                            ms.getLoopbackMode());
    }
  
}

Saída :

TTL : 20
Time to Live : 20
Interface : /127.0.0.1
Network Inteface : name:lo (Software Loopback Interface 1)
Loopback mode : true

Para uma implementação detalhada de um aplicativo de soquete multicast com métodos para pacotes joinGroup() e send(), consulte Um aplicativo de chat em grupo em java

Referências:
Documentação oficial do Java
Este artigo é uma contribuição de Rishabh Mahrsee . Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando contribute.geeksforgeeks.org ou enviar o seu artigo para contribute@geeksforgeeks.org. Veja o seu artigo na página principal do GeeksforGeeks e ajude outros Geeks.

Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.