Páginas

sábado, 2 de fevereiro de 2013

UDP e Datagram


Na postagem de hoje vamos abordar um pouco sobre comunicação entre dispositivos no android. Para realizar essa comunicação utilizaremos a tecnologia Wi-fi. Para isso, é necessário que os dispositivos nos quais iremos executar nosso código estejam conectados a mesma rede (ao mesmo roteador).

Para obtermos acesso a internet através do nosso aplicativo basta adicionar a seguinte tag no arquivo AndroidManifest.xml


A tag deve ser inserida antes da tag <application> dentro da tag <manifest>

Feito isso, podemos iniciar a comunicação utilizando a conexão Wifi disponível. A ideia é simples. Enviaremos uma mensagem via broadcast e todos os nós que escutarem a mensagem, respondem também via broadcast.



Precisamos descobrir qual é o endereço broadcast da rede na qual estamos conectados, basta executar o seguinte código
private InetAddress getBroadcastAddress() throws IOException {
    WifiManager wifi = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
    DhcpInfo dhcp = wifi.getDhcpInfo();

    int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
    byte[] quads = new byte[4];
    for (int k = 0; k < 4; k++)
 quads[k] = (byte) ((broadcast >> k * 8) & 0xFF);
    return InetAddress.getByAddress(quads);
}

É necessário manter uma instância de um objeto DatagramSocket para comunicar efetuar comunicação com a rede. Assim, instanciamos um objeto
datagramSocket = new DatagramSocket(DISCOVERY_PORT);
datagramSocket.setBroadcast(true);
e definimos que utilizaremos broadcast naquele socket.

Agora, basta criar um DatagramPacket
DatagramPacket packet = new DatagramPacket(message.getBytes(), message.length(),getBroadcastAddress(), DISCOVERY_PORT);
e enviar o pacote atraves do DatagramSocket
datagramSocket.send(packet);

Agora, em outro dispositivo, basta esperar a chegada de um pacote
DatagramPacket packet = new DatagramPacket(buf, buf.length);
datagramSocket.receive(packet);
String received = new String(packet.getData(), 0,packet.getLength());
Nossa comunicação utilizará o protocolo UDP. (Observe que neste protocolo não há garantia de que o pacote irá chegar.)

Nenhum comentário:

Postar um comentário