2

I am trying to build an android app, which will send messages to all the devices available in the wifi network. So I have decided to implement multicasting . I am testing my app in Nexus5 & Sumsung S4(GT-I9500). My code is working good in both devices individually, which means now i am receiving the sent message from same device , but not from other devices.Please Check my Service Class Below. Can anyone help me to solve the issue?

public class MulticastService {
public String message;
InetAddress group;
MulticastSocket socket;
GSLMulticastListener gslMulticastListener;
public NewMulticastService(GSLMulticastListener gslMulticastListener) throws IOException {
    this.gslMulticastListener = gslMulticastListener;
    group = InetAddress.getByName("228.5.6.7");
    socket = new MulticastSocket(6789);
    socket.joinGroup(group);
}
public  void send(){
    @SuppressLint("StaticFieldLeak") AsyncTask task = new AsyncTask() {
        @Override
        protected Object doInBackground(Object[] objects) {
            DatagramPacket hi = new DatagramPacket(message.getBytes(), message.length(),
                    group, 6789);
            try {
                socket.send(hi);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    };
    if (Build.VERSION.SDK_INT >= 11) task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    else task.execute();
}
public void runListener(){
    @SuppressLint("StaticFieldLeak") AsyncTask asyncTask = new AsyncTask() {
        @Override
        protected Object doInBackground(Object[] objects) {
            while(true){
                byte[] buf = new byte[1000];
                DatagramPacket recv = new DatagramPacket(buf, buf.length);
                try {
                    Log.d("runListener", "doInBackground: Listening");
                    socket.receive(recv);
                    String msg = new String(recv.getData(),0,recv.getLength());
                    Log.d("runListener", "doInBackground: "+ msg);
                    gslMulticastListener.onMulticastResponse(msg);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
    };
    if (Build.VERSION.SDK_INT >= 11) asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    else asyncTask.execute();
}
}

My Manifest Permissions :

 <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Invictus Cody
  • 517
  • 6
  • 17

0 Answers0