我们这里使用MulticastSocket以及组播锁的形式实时监控对应的ip和端口是否实时存在!
下面我们来看代码:
public Thread getListenThread(){
Thread thread = null;
try {
thread = new Thread() {
private static final String TAG = "ReceiverThread";
private static final String MULTICAST_IP = "239.255.255.250";
private static final int MULTICAST_PORT = 1900;
private WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
private MulticastSocket multicastSocket = new MulticastSocket(MULTICAST_PORT);
private InetAddress groupInetAddress = InetAddress.getByName(MULTICAST_IP);
private boolean joinedGroup = false;
@Override
public void run() {
while (!this.isInterrupted()) {
if (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLED) {
if (!joinedGroup)
try {
multicastSocket.joinGroup(groupInetAddress);
wifiManager.createMulticastLock(TAG).acquire();
joinedGroup = true;
} catch (IOException ex) {
Log.i(TAG, "Failed to join Multicast group:" + ex.getMessage());
}
try {
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
while(true){
multicastSocket.receive(packet);
String text = new String(buffer, 0, packet.getLength());;
// LogUtil.i(TAG, "Message received: /n" + text+"RECEIVED END");
Message msg = new Message();
msg.what = 4;
Bundle bundle = new Bundle();
bundle.putString("text", text);
msg.setData(bundle);
handlerdishes.sendMessageDelayed(msg,500);
}
} catch (SocketTimeoutException e) {
e.printStackTrace();
} catch (IOException ex) {
multicastSocket = null;
ex.printStackTrace();
}
} else
joinedGroup = false;
}
}
};
} catch (IOException e) {
e.printStackTrace();
}
return thread;
}
/*
* 监听盒子状态信息
*/
Thread boxListener_thread = getListenThread();
boxListener_thread.start();
需要的权限有如下: