DatagramSocket广播使用 附HandleThread使用

来源:互联网 发布:武侠大宗师java gm工具 编辑:程序博客网 时间:2024/05/21 09:20

发送广播的类

[java] view plain copy
  1. package com.example.socketsendbroadcast;  
  2.   
  3. import java.net.DatagramPacket;  
  4. import java.net.DatagramSocket;  
  5. import java.net.InetAddress;  
  6. import android.os.Bundle;  
  7. import android.os.Handler;  
  8. import android.os.HandlerThread;  
  9. import android.app.Activity;  
  10. import android.util.Log;  
  11.   
  12. public class SocketSendBroadActivity extends Activity {  
  13.     protected static final String TAG = "SocketSendBroadActivity";  
  14.     private Handler mHandler;  
  15.       
  16.     @Override  
  17.     protected void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19.         Log.v(TAG, "onCreate");  
  20.         setContentView(R.layout.activity_socket_send_broad);  
  21.         //通过Handler启动线程    
  22.         HandlerThread handlerThread = new HandlerThread("threadsendbroad");  
  23.         handlerThread.start();  
  24.         mHandler =  new Handler(handlerThread.getLooper());  
  25.         mHandler.post(mRunnable);    
  26.     }  
  27.   
  28.     private Runnable mRunnable = new Runnable() {    
  29.           
  30.         public void run() {  
  31.             Log.v(TAG, "run...");  
  32.             try {  
  33.                 sendBroadcast();  
  34.             } catch (Exception e) {  
  35.                 // TODO Auto-generated catch block  
  36.                 e.printStackTrace();  
  37.             }  
  38.         }    
  39.             
  40.     };    
  41.     public static void sendBroadcast()throws Exception{  
  42.         Log.v(TAG, "sendBroadcast");  
  43.         DatagramSocket socket;  
  44.         DatagramPacket packet;  
  45.         byte[] data = "helloworld".getBytes();  
  46.           
  47.         socket = new DatagramSocket();  
  48.         socket.setBroadcast(true);  
  49.         packet = new DatagramPacket(data,data.length,InetAddress.getByName("255.255.255.255"),8600);    //指定端口8600  
  50.         for(int i = 0 ; i < 20 ; i++){  
  51.             Thread.sleep(2000);  
  52.             socket.send(packet);  
  53.         }  
  54.     }  
  55. }  

接受广播的类

[java] view plain copy
  1. package com.example.socketreceiverbroadcase;  
  2.   
  3. import android.os.Bundle;  
  4. import android.app.Activity;  
  5. import android.content.Intent;  
  6. import android.util.Log;  
  7.   
  8. public class SocketReceiverBroadcastActivity extends Activity {  
  9.     private static final String TAG = "SocketReceiverBroadcastActivity";  
  10.       
  11.     @Override  
  12.     protected void onCreate(Bundle savedInstanceState) {  
  13.         Log.v(TAG, "onCreate");  
  14.         super.onCreate(savedInstanceState);  
  15.         setContentView(R.layout.activity_socket_receiver_broadcast);  
  16.         Intent intent = new Intent();  
  17.         intent.setClass(this, ReceiverService.class);  
  18.         this.startService(intent);  
  19.     }  
  20.   
  21. }  


[java] view plain copy
  1. package com.example.socketreceiverbroadcase;  
  2.   
  3. import java.net.DatagramPacket;  
  4. import java.net.DatagramSocket;  
  5. import android.app.Service;  
  6. import android.content.Intent;  
  7. import android.os.Handler;  
  8. import android.os.HandlerThread;  
  9. import android.os.IBinder;  
  10. import android.util.Log;  
  11.   
  12. public class ReceiverService extends Service{  
  13.     protected static final String TAG = "ReceiverService";  
  14.     private Handler mHandler;  
  15.     @Override  
  16.     public IBinder onBind(Intent intent) {  
  17.         // TODO Auto-generated method stub  
  18.         return null;  
  19.     }  
  20.   
  21.     @Override  
  22.     public void onCreate() {  
  23.         super.onCreate();  
  24.         //通过Handler启动线程    
  25.         HandlerThread handlerThread = new HandlerThread("threadreceiverbroadcast");  
  26.         handlerThread.start();  
  27.         mHandler =  new Handler(handlerThread.getLooper());  
  28.         mHandler.post(mRunnable);    
  29.     }  
  30.   
  31.     private Runnable mRunnable = new Runnable() {    
  32.           
  33.         public void run() {  
  34.             Log.v(TAG, "run...");  
  35.             try {  
  36.                 receiveBroadcast();  
  37.             } catch (Exception e) {  
  38.                 // TODO Auto-generated catch block  
  39.                 e.printStackTrace();  
  40.             }  
  41.         }    
  42.             
  43.     };    
  44.       
  45.     public static void receiveBroadcast()throws Exception{  
  46.         byte[] buffer = new byte[99];  
  47.         DatagramSocket server = new DatagramSocket(8600);  
  48.         DatagramPacket packet = new DatagramPacket(buffer , buffer.length);  
  49.         for(;;){  
  50.             Log.v(TAG, "receiveBroadcast");  
  51.             server.receive(packet);  
  52.             String s = new String(packet.getData( ), 0, packet.getLength( ));  
  53.             Log.v(TAG, "packet.getAddress = " + packet.getAddress() +  
  54.                     " at port " + packet.getPort() +  
  55.                     " get content " + s);  
  56.         }  
  57.     }  
  58. }  

测试结果:

[plain] view plain copy
  1. 01-01 22:58:54.990: V/SocketReceiverBroadcastActivity(7138): onCreate  
  2. 01-01 22:58:55.110: V/ReceiverService(7138): run...  
  3. 01-01 22:58:55.120: V/ReceiverService(7138): receiveBroadcast  
  4. 01-01 22:59:02.130: V/ReceiverService(7138): packet.getAddress = /192.168.30.106 at port 49869 get content helloworld  
  5. 01-01 22:59:02.130: V/ReceiverService(7138): receiveBroadcast  
  6. 01-01 22:59:04.180: V/ReceiverService(7138): packet.getAddress = /192.168.30.106 at port 49869 get content helloworld  
  7. 01-01 22:59:04.180: V/ReceiverService(7138): receiveBroadcast  
  8. 01-01 22:59:10.120: V/ReceiverService(7138): packet.getAddress = /192.168.30.106 at port 49869 get content helloworld  
  9. 01-01 22:59:10.120: V/ReceiverService(7138): receiveBroadcast  
  10. 01-01 22:59:12.160: V/ReceiverService(7138): packet.getAddress = /192.168.30.106 at port 49869 get content helloworld  
  11. 01-01 22:59:12.160: V/ReceiverService(7138): receiveBroadcast  
  12. 01-01 22:59:14.110: V/ReceiverService(7138): packet.getAddress = /192.168.30.106 at port 49869 get content helloworld  
  13. 01-01 22:59:14.110: V/ReceiverService(7138): receiveBroadcast  
0 0
原创粉丝点击