Classe Java.net.MulticastSocket em Java
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:
- 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()
- 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
- 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 :
- 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
- 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
- getTTL (obsoleto): usado para obter o tempo padrão de vida para os pacotes enviados a partir desses sockets multicast
Sintaxe: public byte getTTL()
- getTimeToLive(): Retorna o tempo padrão de vida para os pacotes enviados deste socket multicast.
Sintaxe: public void getTimeToLive()
- 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.
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.
- 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.
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
- 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
- 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
- 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
- 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
- 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
- getLoopbackMode(): Retorna a configuração do modo de loopback.
Sintaxe: public vboolean getLoopbackMode() lança SocketException
- 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.
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva