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" />