DatagramSocket广播使用 附HandleThread使用
来源:互联网 发布:武侠大宗师java gm工具 编辑:程序博客网 时间:2024/05/21 09:20
发送广播的类
- package com.example.socketsendbroadcast;
-
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.HandlerThread;
- import android.app.Activity;
- import android.util.Log;
-
- public class SocketSendBroadActivity extends Activity {
- protected static final String TAG = "SocketSendBroadActivity";
- private Handler mHandler;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Log.v(TAG, "onCreate");
- setContentView(R.layout.activity_socket_send_broad);
-
- HandlerThread handlerThread = new HandlerThread("threadsendbroad");
- handlerThread.start();
- mHandler = new Handler(handlerThread.getLooper());
- mHandler.post(mRunnable);
- }
-
- private Runnable mRunnable = new Runnable() {
-
- public void run() {
- Log.v(TAG, "run...");
- try {
- sendBroadcast();
- } catch (Exception e) {
-
- e.printStackTrace();
- }
- }
-
- };
- public static void sendBroadcast()throws Exception{
- Log.v(TAG, "sendBroadcast");
- DatagramSocket socket;
- DatagramPacket packet;
- byte[] data = "helloworld".getBytes();
-
- socket = new DatagramSocket();
- socket.setBroadcast(true);
- packet = new DatagramPacket(data,data.length,InetAddress.getByName("255.255.255.255"),8600);
- for(int i = 0 ; i < 20 ; i++){
- Thread.sleep(2000);
- socket.send(packet);
- }
- }
- }
接受广播的类- package com.example.socketreceiverbroadcase;
-
- import android.os.Bundle;
- import android.app.Activity;
- import android.content.Intent;
- import android.util.Log;
-
- public class SocketReceiverBroadcastActivity extends Activity {
- private static final String TAG = "SocketReceiverBroadcastActivity";
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- Log.v(TAG, "onCreate");
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_socket_receiver_broadcast);
- Intent intent = new Intent();
- intent.setClass(this, ReceiverService.class);
- this.startService(intent);
- }
-
- }
- package com.example.socketreceiverbroadcase;
-
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import android.app.Service;
- import android.content.Intent;
- import android.os.Handler;
- import android.os.HandlerThread;
- import android.os.IBinder;
- import android.util.Log;
-
- public class ReceiverService extends Service{
- protected static final String TAG = "ReceiverService";
- private Handler mHandler;
- @Override
- public IBinder onBind(Intent intent) {
-
- return null;
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
-
- HandlerThread handlerThread = new HandlerThread("threadreceiverbroadcast");
- handlerThread.start();
- mHandler = new Handler(handlerThread.getLooper());
- mHandler.post(mRunnable);
- }
-
- private Runnable mRunnable = new Runnable() {
-
- public void run() {
- Log.v(TAG, "run...");
- try {
- receiveBroadcast();
- } catch (Exception e) {
-
- e.printStackTrace();
- }
- }
-
- };
-
- public static void receiveBroadcast()throws Exception{
- byte[] buffer = new byte[99];
- DatagramSocket server = new DatagramSocket(8600);
- DatagramPacket packet = new DatagramPacket(buffer , buffer.length);
- for(;;){
- Log.v(TAG, "receiveBroadcast");
- server.receive(packet);
- String s = new String(packet.getData( ), 0, packet.getLength( ));
- Log.v(TAG, "packet.getAddress = " + packet.getAddress() +
- " at port " + packet.getPort() +
- " get content " + s);
- }
- }
- }
测试结果:- 01-01 22:58:54.990: V/SocketReceiverBroadcastActivity(7138): onCreate
- 01-01 22:58:55.110: V/ReceiverService(7138): run...
- 01-01 22:58:55.120: V/ReceiverService(7138): receiveBroadcast
- 01-01 22:59:02.130: V/ReceiverService(7138): packet.getAddress = /192.168.30.106 at port 49869 get content helloworld
- 01-01 22:59:02.130: V/ReceiverService(7138): receiveBroadcast
- 01-01 22:59:04.180: V/ReceiverService(7138): packet.getAddress = /192.168.30.106 at port 49869 get content helloworld
- 01-01 22:59:04.180: V/ReceiverService(7138): receiveBroadcast
- 01-01 22:59:10.120: V/ReceiverService(7138): packet.getAddress = /192.168.30.106 at port 49869 get content helloworld
- 01-01 22:59:10.120: V/ReceiverService(7138): receiveBroadcast
- 01-01 22:59:12.160: V/ReceiverService(7138): packet.getAddress = /192.168.30.106 at port 49869 get content helloworld
- 01-01 22:59:12.160: V/ReceiverService(7138): receiveBroadcast
- 01-01 22:59:14.110: V/ReceiverService(7138): packet.getAddress = /192.168.30.106 at port 49869 get content helloworld
- 01-01 22:59:14.110: V/ReceiverService(7138): receiveBroadcast
0 0