Поддерживается ли MulticastSocket в Android 2.3? - PullRequest
0 голосов
/ 10 января 2011

Поддерживается ли MulticastSocket в Android 2.3?

У меня есть модуль на Java Server. Этот сервер будет отправлять информацию без перерыва. И у меня есть модуль Android Client (на эмуляторе виртуального устройства). Сначала я запустите Android-клиент, чтобы он дождался получения информации о сервере. Затем я запустил Java-сервер для отправки информации. Наконец, я хочу, чтобы мой эмулятор мог получать информацию с сервера Java. PS: Я буду успешным, если все 2 модуля Java.

Это мой серверный модуль (очень простой)

  public class Server {

     public Server() throws IOException, InterruptedException{

        DatagramSocket socket = new DatagramSocket();

        byte[] b = new byte[1024]; 

        DatagramPacket dgram = new DatagramPacket(b, b.length,InetAddress.getByName
  ("239.0.0.1"), 5000);  
        System.err.println("Sending "+b.length+" bytes to "+dgram.getAddress()+':'+
  dgram.getPort()); 
        while(true) {   

           System.err.print(".");   
           socket.send(dgram);   

           Thread.sleep(1000); 
        } 
     }

  }

Это мой эмулятор Android (тоже очень просто)

  public class ClientForm extends Activity {
     private EditText edcontentview;
     @Override
     public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.clientform);
        edcontentview = (EditText)findViewById(R.id.edtcontentview);
        MulticastLock _wifiMulticastLock = ((WifiManager)this.getSystemService(Activity.WIFI_SERVICE)).createMulticastLock("_wifiMulticastLock");
          _wifiMulticastLock.setReferenceCounted(true);    
          _wifiMulticastLock.acquire();
        new Thread(new Runnable(){             
           @Override
           public void run() {
              byte[] b = new byte[1024];
              final DatagramPacket dgram = new DatagramPacket(b, b.length); 
              MulticastSocket socket = null;
              try {
                 socket = new MulticastSocket(5000);
                 socket.joinGroup(InetAddress.getByName("239.0.0.1"));
              } catch (IOException e) {
                 e.printStackTrace();
              }  
              while(true) {   
                 try {
                    socket.receive(dgram);
                    Thread.sleep(1000);
                 } catch (IOException e) {
                    e.printStackTrace();
                 } catch (InterruptedException e) {
                    e.printStackTrace();
                 }   
                 new Handler().post(new Runnable() {
                 @Override
                    public void run() {
                       edcontentview.append("Received " + dgram.getLength() +     " bytes from " + dgram.getAddress());                                    
                    }
                 });
                 dgram.setLength(b.length);
              }
           }
        }).start();
     }
  }

Ответы [ 2 ]

2 голосов
/ 10 января 2011

Да. Разве это не то, что вы искали?

0 голосов
/ 27 января 2014

Возможно, нет. Похоже, что поддержка многоадресной рассылки в Android не так надежна, как некоторые могут надеяться. Смотри http://codeisland.org/2012/udp-multicast-on-android/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...