Problema con MulticastSocket en Java-Android

Estoy empezando a codificar con MulticastSocket, tratando de hacer una aplicación sencilla con un cliente y un servidor para enviar mensajes.

El código que tengo para el servidor:

import java.io.IOException; import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; import java.net.SocketException; public class Servidor { private static MulticastSocket ms; public static void main(String[] args) throws IOException{ InetAddress sessAddr = InetAddress.getByName("224.2.76.24"); try{ sessAddr = InetAddress.getByName("224.2.76.24"); ms = new MulticastSocket(5500); ms.joinGroup(sessAddr); while (true) { byte[] mensaje = new byte[1024]; mensaje = "aa".getBytes(); DatagramPacket dp = new DatagramPacket(mensaje, mensaje.length,sessAddr,5500); ms.send(dp); } } catch (SocketException se) { System.err.println(se); } ms.leaveGroup(sessAddr); } } 

Y esto en el cliente:

  package com.example; import java.io.IOException; import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; import java.net.UnknownHostException; import android.app.Activity; import android.os.Bundle; import android.widget.EditText; import android.widget.TextView; public class ClienteMultiCast extends Activity { /** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView Mensaje; Mensaje =(TextView)findViewById(R.id.Mensaje); InetAddress ia = null; byte[] buffer = new byte[65535]; MulticastSocket ms = null; int port = 5500; try { ia = InetAddress.getByName("224.2.76.24"); DatagramPacket dp = new DatagramPacket(buffer, buffer.length,ia,port); ms = new MulticastSocket(port); ms.joinGroup(ia); while (true) { ms.receive(dp); String s = new String(dp.getData(),0,dp.getLength()); Mensaje.setText(s); } } catch (UnknownHostException e) {Mensaje.setText(e.getMessage());} catch (IOException e) {Mensaje.setText(e.getMessage()); } try { ms.leaveGroup(ia); } catch (IOException e) { Mensaje.setText(e.getMessage()); } } } 

El problema es que cuando empiezo ambos, no pasa nada. El cliente no recibe ningún mensaje.

Alguna idea de lo que está mal?

Diego,

De forma predeterminada, la pila de WiFi de Android filtra los paquetes de multidifusión. Echa un vistazo a http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html .

Usted necesita algo en la línea de:

  public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* Turn off multicast filter */ MulticastLock mcastLock = new MulticastLock(); mcastLock.acquire(); /* Process Multicast Packets */ } 

Parece que el soporte de multidifusión en Android no es tan sólido como algunos de uso podría esperar. Ver http://codeisland.org/2012/udp-multicast-on-android/

Es decir, si realmente funciona o puede depender del dispositivo. No está funcionando en mi Nexus5.

https://code.google.com/p/android/issues/detail?id=51195

  • String.equals () siempre devuelve true
  • Convertir RGB a HSV en Android
  • Error de compilación de Android; Java plugin se ha aplicado, no es compatible con Android
  • Android, envío de un mensaje de voz
  • Cómo determinar la posición final o el ángulo de una imagen girada
  • Dependencias transitivas no resueltas para una biblioteca aar usando gradle
  • Error al analizar xml: prefijo sin consolidar de com.google.android.gms.ads.AdView
  • Utilizar Bouncy Castle para extraer información de certificados de android
  • Haz que la aplicación para Android escute los enlaces compartidos
  • Ampliar el teclado virtual de Android
  • Qué tan grande es la resolución de la pantalla con el desarrollo de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.