android发送UDP广播及在PC上接受广播数据

android端,发送UDP广播包:

 

public class WifiBroadcastActivity extends Activity {
 private static String LOG_TAG="WifiBroadcastActivity";
 private boolean start = true;
 private EditText IPAddress;
 private String address;
 public static final int DEFAULT_PORT = 43708;
 private static final int MAX_DATA_PACKET_LENGTH = 40;
    private byte[] buffer = new byte[MAX_DATA_PACKET_LENGTH];
    Button startButton;
    Button stopButton;
   
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        IPAddress = (EditText) this.findViewById(R.id.address );
        startButton = (Button) this.findViewById(R.id.start);
        stopButton = (Button) this.findViewById(R.id.stop);
        startButton.setEnabled(true);
        stopButton.setEnabled(false);
       
        address = getLocalIPAddress();
  if( address != null ){
   IPAddress.setText( address );
  }
  else {
   IPAddress.setText("Can not get IP address");
   
   return;
  }
  EditText numberEdit = (EditText) findViewById(R.id.number);
  numberEdit.setText(number);
       
        startButton.setOnClickListener( listener );
        stopButton.setOnClickListener( listener );
    }
   
    private String number = getRandomNumber();
    private View.OnClickListener listener = new View.OnClickListener() {
  
  @Override
  public void onClick(View v) {
   if( v == startButton ){    
    start = true;
    new BroadCastUdp(number).start();
    startButton.setEnabled( false );
    stopButton.setEnabled(true);
   }else if( v == stopButton ){
    start = false;
    startButton.setEnabled(true);
    stopButton.setEnabled(false);
   }
  }
 };
       
    private String getLocalIPAddress(){
     try {
      for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();  
       en.hasMoreElements();) { 

       NetworkInterface intf = en.nextElement(); 

       for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 

        InetAddress inetAddress = enumIpAddr.nextElement(); 

        if (!inetAddress.isLoopbackAddress()) {
         return inetAddress.getHostAddress().toString();
        }
       }
      }
     } catch (SocketException ex){
      Log.e(LOG_TAG, ex.toString()); 
     

     return null;
    }
   
    private String getRandomNumber(){
     int num = new Random().nextInt(65536);
     String numString = String.format("x", num);
     return numString;
    }
   
    public class BroadCastUdp extends Thread{
     private String dataString;
     private DatagramSocket udpSocket;
     public BroadCastUdp( String dataString ) {
   this.dataString = dataString;
  }
     
     public void run(){
      DatagramPacket dataPacket = null;
      
      try {
       udpSocket = new DatagramSocket(DEFAULT_PORT );
       
       dataPacket = new DatagramPacket(buffer, MAX_DATA_PACKET_LENGTH);      
       byte[] data = dataString.getBytes();
    dataPacket.setData( data );
    dataPacket.setLength( data.length );
    dataPacket.setPort( DEFAULT_PORT );   
   
    InetAddress broadcastAddr;
   
    broadcastAddr = InetAddress.getByName("255.255.255.255");
    dataPacket.setAddress(broadcastAddr);
   } catch (Exception e) {
    Log.e(LOG_TAG, e.toString());
   }

   while( start ){
    try {     
     udpSocket.send(dataPacket);
     sleep( 10 );
    } catch(Exception e) {
     Log.e(LOG_TAG, e.toString());
       
   }
   
   udpSocket.close();
     }
    }
}

 

 

 

PC端,接收UDP广播数据:

public class WifiListener {
 private static DatagramSocket udpSocket;
 private static byte[] data = new byte[256];
 private static DatagramPacket udpPacket = new DatagramPacket( data, 256 );
 
 public static void main(String[] args) {
  try {
   udpSocket = new DatagramSocket( 43708 );
  } catch (SocketException e) {
   System.out.println( e.toString());
  }
  
  while( true ){
   try {    
    udpSocket.receive(udpPacket);
   } catch (Exception e) {
    System.out.println( e.toString());
   }
   
   if( udpPacket.getLength() != 0 ){
    String codeString = new String( data, 0, udpPacket.getLength() );
    System.out.println( codeString );
   }
  }
 }
}


原文地址:http://blog.sina.com.cn/s/blog_6c0a8fbb0100s3k5.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值