Broadcast em Java

3 respostas
T

Eae galera, eu estou fazendo um projetinho em rede, e me deparei com um problema.
Como eu posso fazer um Broadcast em java ?

A idéia é… Cliente Inunda a rede (Broadcast) e Servidores existentes, respondem ao cliente, com seus respectivos endereços.

Cliente ---- > Inundar (255.255.255.255 - Endereço de broadcast)

Serv1 ---- > Sou o 200.14.25.01
Serv2 ---- > Sou o 201.15.22.01
Etc…

Li algumas coisas sobre Multicast, fiz alguns exemplos, mas nada com broadcast.

Obrigado desde já.

3 Respostas

D

Qual serviço você deseja requisitar a esses servidores?

T

A Principio, eu quero que eles respondam, com as funcoes que eles implementam, mas no caso, seria soh uma passagem de mensagem mesmo…
(Irei simular um RPC por socket).

T

Bom, ai vão 2 trechos de códigos que podem explicar mais o que estou fazendo…

Um pedaço do Cliente:

int porta = 5000;
String enderecoBroadcast = "255.255.255.255";
InetAddress address = InetAddress.getByName(enderecoBroadcast);
DatagramSocket socketUDP = new DatagramSocket(porta, address);
String mensagemAYA = "AYA?";
byte mensagem[] = mensagemAYA.getBytes();
DatagramPacket pacoteAYA = new DatagramPacket(mensagem, mensagem.length, address, porta);
socketUDP.send(pacoteAYA);
		        
//Recebimento de resposta
DatagramPacket pacoteRAYA = new DatagramPacket(mensagem, mensagem.length);
socketUDP.receive(pacoteRAYA);
InetAddress servidorAddr = pacoteRAYA.getAddress();				
areaResp.append("The Server Addr is : '" + servidorAddr.getHostAddress());				
socketUDP.close();

Aqui eu estou começando um socket do tipo Datagram (UDP) e tentando mandar a conexao por broadcast (255.255.255.255) pela porta 5000.
A mensagem enviada é AYA e depois espero a resposta, quando a resposta chegar, eu vejo o IP real do servidor alcançado.

Já no Servidor:

byte[] buffer = new byte[1024];
int port = 5000;
String message;		        
socket = new DatagramSocket(port);
		        
while(true){
		        
	try{
    		area.append("Server is started\n");
		        		
      		//Receive request from client
      		DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
       		socket.receive(packet);
     		InetAddress client = packet.getAddress();
      		int client_port = packet.getPort();
      		area.append(" Received "+new String(buffer)+" from "+client);
       		
      		// send information to the client
      		message = "Yes, i'm alive";
      		buffer = message.getBytes();
      		packet = new DatagramPacket(buffer, buffer.length,client,client_port);
      		socket.send(packet);

Eu espero um datagrama de qualquer lugar, ao chegar, pego os dados do cliente (necessários para resposta), monto uma mensagem de retorno, e retorno direto ao cliente.

Ao executar o Servidor, Ok.
Ja quando o Cliente tenta conectar…

Isso eu sei, significa que ele não conseguiu associar o endereço ao Socket, porem, se eu nao posso tentar associar o broadcast ao socket, como farei isso ?

Espero ter esclarecido mais minha duvida.

Criado 3 de maio de 2011
Ultima resposta 4 de mai. de 2011
Respostas 3
Participantes 2