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

  • Cómo cambiar / cambiar el tamaño de EditText en el diseño de la tabla?
  • cómo detectar este gesto de movimiento específico a través de sensores?
  • HashMap da una lista desordenada de valores?
  • La vista de búsqueda no funciona desde la aplicación compat
  • Arquitectura de aplicaciones de Android: basada en eventos o en capas
  • El diseño de fragmentos de Android no se carga al mostrar un anuncio intersticial de Admob en OnCreateView
  • Importación de hormigas build.xml en Eclipse
  • ¿Cómo puedo optimizar este código que contiene alguna línea repetitiva?
  • NetBeans Clean & Build Error de Android: Java.Lang X500 Acceso principal
  • ¿Podemos usar Android Studio para el desarrollo de AOSP?
  • ¿Cómo puedo solucionar un error de `android.app.Application no se puede enviar a`
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.