Broadcast [Resolvido]

7 respostas
W

Boa tarde, estou tentando fazer um envio de comando via broadcast em uma rede windows, mas não está funcionando. Segue as minhas classes:

import java.io.*;
import java.net.*;

public class ControleBRMAClient {

    public static void main(String[] args) throws IOException {

        MulticastSocket socket = new MulticastSocket(4446);
        InetAddress address = InetAddress.getByName("230.0.0.1");
        socket.joinGroup(address);

        DatagramPacket packet;

        while (true) {
            byte[] buf = new byte[256];
            packet = new DatagramPacket(buf, buf.length);
            socket.receive(packet);
            String received = new String(packet.getData(), 0, packet.getLength());
            System.out.pritln(received);
        }
    }
}

e

import java.net.*;

public class ControleBRMAServer {

    protected DatagramSocket socket = null;
    Socket s = new Socket();

    public ControleBRMAServer()  {
        try {
            socket = new DatagramSocket(4445);
        } catch (SocketException ex) {
            ex.printStackTrace();
        }
    }

    public void comando(String comando) {
        try {
            byte[] buf = new byte[256];
            String dString = comando;
            buf = dString.getBytes();
            InetAddress group = InetAddress.getByName("230.0.0.1");
            System.out.println(group.getAllByName("230.0.0.1").length);
            DatagramPacket packet = new DatagramPacket(buf, buf.length, group, 4446);
            socket.send(packet);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Ai eu coloco as duas classes pra rodar e funciona perfeitamente local, mas se eu tento colocar o client em outra maquina da rede não funciona, simplesmente não funciona. Será que alguem pode me dar uma mão?

7 Respostas

E
wagne23:
Boa tarde, estou tentando fazer um envio de comando via broadcast em uma rede windows, mas não está funcionando. Segue as minhas classes:
import java.io.*;
import java.net.*;

public class ControleBRMAClient {

    public static void main(String[] args) throws IOException {

        MulticastSocket socket = new MulticastSocket(4446);
        InetAddress address = InetAddress.getByName("230.0.0.1");
        socket.joinGroup(address);

        DatagramPacket packet;

        while (true) {
            byte[] buf = new byte[256];
            packet = new DatagramPacket(buf, buf.length);
            socket.receive(packet);
            String received = new String(packet.getData(), 0, packet.getLength());
            System.out.pritln(received);
        }
    }
}

e

import java.net.*;

public class ControleBRMAServer {

    protected DatagramSocket socket = null;
    Socket s = new Socket();

    public ControleBRMAServer()  {
        try {
            socket = new DatagramSocket(4445);
        } catch (SocketException ex) {
            ex.printStackTrace();
        }
    }

    public void comando(String comando) {
        try {
            byte[] buf = new byte[256];
            String dString = comando;
            buf = dString.getBytes();
            InetAddress group = InetAddress.getByName("230.0.0.1");
            System.out.println(group.getAllByName("230.0.0.1").length);
            DatagramPacket packet = new DatagramPacket(buf, buf.length, group, 4446);
            socket.send(packet);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Ai eu coloco as duas classes pra rodar e funciona perfeitamente local, mas se eu tento colocar o client em outra maquina da rede não funciona, simplesmente não funciona. Será que alguem pode me dar uma mão?

Use o MulticastHammer para diagnosticar sua rede. Muitas redes não passam os pacotes de multicast, a menos que configuradas corretamente.

http://www.nortel.com/corporate/nortel_on_nortel/multicast_hammer.html

W

Eu fiz os testes aqui e paraceu tudo normal. Inclusive ja temos outros programas rodando na rede que fazem esse tipo de comunicação. Alguem mais pode me ajudar?

E

Só queria fazer uma perguntinha. Por que é que você não usa “MulticastSocket” em ambos os programas?

W

Vc tem algum exemplo de uso dessa classe?

E

O modo de usar MulticastSocket no cliente e no servidor é exatamente igual (ou seja, ambos os programas, cliente e servidor, devem usar joinGroup).
Basta apenas você usar as APIs de recepção e envio, exatamente como você mesmo fez (como você deve saber, MulticastSocket é uma subclasse de DatagramSocket, mas isso não quer dizer que, para acessar o UDP Multicast, você possa usar DatagramSocket. Devido às opções de socket que você precisa passar, para acessar UDP Multicast é necessário usar MulticastSocket tanto no cliente quanto no servidor.

E

Você mesmo deu exemplo de uso da classe :slight_smile:

W

Obrigado entanglement, mudei a minha classe de servidor para usar MulticastSocket no lugar de DatagramSocket e funcionou perfeitamente.

Criado 27 de julho de 2010
Ultima resposta 28 de jul. de 2010
Respostas 7
Participantes 2