首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MulticastSocket在Java-Android上的问题

MulticastSocket在Java-Android上的问题
EN

Stack Overflow用户
提问于 2011-01-04 09:31:23
回答 2查看 16K关注 0票数 7

我开始使用MulticastSocket编写代码,试图创建一个简单的应用程序,其中包含发送消息的客户端和服务器。

我为服务器编写的代码如下:

代码语言:javascript
复制
    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);

    }

}

在客户端上是这样的:

代码语言:javascript
复制
    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());
  }
    }
}

问题是,当我同时启动这两个程序时,什么也没有发生。客户端没有收到任何消息。

知道出什么问题了吗?

EN

回答 2

Stack Overflow用户

发布于 2011-01-05 00:35:16

迭戈

默认情况下,Android WiFi堆栈会过滤掉多播数据包。看看http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html吧。

你需要一些类似的东西:

代码语言:javascript
复制
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    /* Turn off multicast filter */
    MulticastLock mcastLock = new MulticastLock();
    mcastLock.acquire();

    /* Process Multicast Packets */

  }
票数 8
EN

Stack Overflow用户

发布于 2014-01-27 11:03:51

看起来Android中的多播支持并不像一些用户希望的那样可靠。请参阅http://codeisland.org/2012/udp-multicast-on-android/

例如,它是否真的有效,或者可能取决于设备。它在我的Nexus5上不工作。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4589946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档