Qual a diferenca entre o bind address, entre o interface address e o multicast address? Quais desses necessitam de uma porta e qual o significado e propósito de cada um deles?
Vamos supor que seu computador tenha 3 placas de rede.
Endereços da placa de rede:
[list]Placa 1 192.168.0.1
Placa 2 172.25.15.1
Placa 3 10.0.0.1[/list]
O interface address é o endereço de cada placa.
Agora vc tem uma aplicação que roda na porta 8888 e ela só dever ser acessada da rede interna da sua empresa(placa 1), então sua aplicação escutará(bind) apenas essa interface na porta 8888, quer dizer que mesmo sendo o mesmo computador conexões para 172.25.15.1 ou 10.0.0.1 não serão aceitas, apenas para a 192.168.0.1 na porta 8888. Esse é o bind address.
O multicast adress vc pode entender aqui http://en.wikipedia.org/wiki/Multicast_address. Mas não tem muito a ver com desenvolvimento.
Completando…
E ainda tem a interface padrão de loopback, com IP 127.0.0.1, que serve apenas para uso local. Quando vc instala o MySQL, por exemplo, ele vem habilitado para escutar apenas nessa interface, sendo necessário modificar o my.ini para permitir o acesso de outros computadores.
[quote=lsjunior]Vamos supor que seu computador tenha 3 placas de rede.
Endereços da placa de rede:
[list]Placa 1 192.168.0.1
Placa 2 172.25.15.1
Placa 3 10.0.0.1[/list]
O interface address é o endereço de cada placa.
Agora vc tem uma aplicação que roda na porta 8888 e ela só dever ser acessada da rede interna da sua empresa(placa 1), então sua aplicação escutará(bind) apenas essa interface na porta 8888, quer dizer que mesmo sendo o mesmo computador conexões para 172.25.15.1 ou 10.0.0.1 não serão aceitas, apenas para a 192.168.0.1 na porta 8888. Esse é o bind address.
O multicast adress vc pode entender aqui http://en.wikipedia.org/wiki/Multicast_address. Mas não tem muito a ver com desenvolvimento.[/quote]
Confuso demais. Vc basicamente disse que o Bind Address é IGUAL ao Interface Address. Mas quando programo isso em Java, primeiro faco o BIND com o bind address. Depois faco o join passando a interface. Redundante? Ou eu que não estou entendendo direto?
O bind address é o endereço que sua aplicação escutará, podendo ser o endereço de uma interface ou de várias interfaces.
Se vc fizer isso, sua aplicação escutará em todos os endereços na porta 8888:
...
ServerSocket ss = new ServerSocket(8888);
Socket s = ss.accept();
...
Mas se mudar para isso, apenas na interface local(127.0.0.1):
...
ServerSocket ss = new ServerSocket(8888);
ss.bind(new InetSocketAddress(InetAddress.getLoopbackAddress(), 8888));
//ss.bind(new InetSocketAddress(InetAddress.getByName("localhost"), 8888)); Mesma coisa da linha anterior
Socket s = ss.accept();
...
E se mudar para isso, apenas em determinada endereço(192.168.0.1):
...
ServerSocket ss = new ServerSocket(8888);
ss.bind(new InetSocketAddress(InetAddress.getByAddress(new byte[] { (byte) 192, (byte) 168, (byte) 0, (byte) 1 }), 8888)); // 192.168.0.1
//ss.bind(new InetSocketAddress(InetAddress.getByName("meucomputador"), 8888)); Mesma coisa da linha anterior, trocando 'meucomputador' pelo nome do seu PC
Socket s = ss.accept();
...
[quote=lsjunior]O bind address é o endereço que sua aplicação escutará, podendo ser o endereço de uma interface ou de várias interfaces.
Se vc fizer isso, sua aplicação escutará em todos os endereços na porta 8888:
...
ServerSocket ss = new ServerSocket(8888);
Socket s = ss.accept();
...
Mas se mudar para isso, apenas na interface local(127.0.0.1):
...
ServerSocket ss = new ServerSocket(8888);
ss.bind(new InetSocketAddress(InetAddress.getLoopbackAddress(), 8888));
//ss.bind(new InetSocketAddress(InetAddress.getByName("localhost"), 8888)); Mesma coisa da linha anterior
Socket s = ss.accept();
...
E se mudar para isso, apenas em determinada endereço(192.168.0.1):
...
ServerSocket ss = new ServerSocket(8888);
ss.bind(new InetSocketAddress(InetAddress.getByAddress(new byte[] { (byte) 192, (byte) 168, (byte) 0, (byte) 1 }), 8888)); // 192.168.0.1
//ss.bind(new InetSocketAddress(InetAddress.getByName("meucomputador"), 8888)); Mesma coisa da linha anterior, trocando 'meucomputador' pelo nome do seu PC
Socket s = ss.accept();
...
[/quote]
Entendi. O default é 0.0.0.0. Mas não entendi a redundancia da PORTA. O que acontece se a porta que vc passa no ServerSocket não é a mesma que vc passa no bind? Deveria jogar uma exception ou ele escolhe ignorar uma das duas? Confuso né?