zoukankan      html  css  js  c++  java
  • Android之udp传输

    注意除了添加Internet权限外,还要添加两行代码

    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
    StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());

    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    import java.net.UnknownHostException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.UUID;
    
    import android.annotation.SuppressLint;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.os.StrictMode;
    import android.util.Log;
    
    @SuppressLint("NewApi") public class SocketUdp {
        Thread mReceiveThread;  
        DatagramSocket serverReceive; 
        DatagramSocket serverSend;
        InetAddress local = null;
        //构造方法
        public SocketUdp(){
            try {  
                StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
                StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());
               
                if(serverReceive!=null){
                    serverReceive.close();
                    serverReceive=null;
                }
                serverReceive=new DatagramSocket(null);
                serverReceive.setReuseAddress(true);
                serverReceive.setBroadcast(true);
                serverReceive=new DatagramSocket(5061);
                mReceiveThread= new Thread(updateThread);  
                mReceiveThread.start(); 
                
                
                local = InetAddress.getByName("192.168.1.51");
                //server.setReuseAddress(true);  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
            
        }
        // 接收数据处理
        final Handler updateBarHandler = new Handler() {  
            @Override  
            public void handleMessage(Message msg) {  
                SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");//设置日期格式
                String strDate=df.format(new Date());
                String  receiveString =(msg.getData()).getString("data");
                SysLogActivity.AddToLog(strDate+"  "+receiveString);
                Log.e("接收:"+strDate,receiveString);  
                
                // 接收数据处理
               
            }  
        };  
      
        // 线程类,该类使用匿名内部类的方式进行声明  
        Runnable updateThread = new Runnable() {  
      
            public void run() {  
                try{
                    // 得到一个消息对象,Message类是android系统提供的  
                    Message msg = new Message();  
                    Bundle b = new Bundle(); 
                 // 定义缓冲区  
                    byte[] buffer = new byte[1024];  
                    // 定义接收数据包  
                    DatagramPacket packet = new DatagramPacket(buffer,  
                            buffer.length);  
                    while (true) {  
                        msg = updateBarHandler.obtainMessage();  
                        // 接收数据  
                        serverReceive.receive(packet);  
                        // 判断是否收到数据,然后输出字符串  
                        if (packet.getLength() > 0) {  
                            String str = new String(buffer, 0, packet  
                                    .getLength());  
                            b.putString("data", str + "
    ");  
                            msg.setData(b);  
                            // 将Message对象加入到消息队列当中  
                            updateBarHandler.sendMessage(msg);  
                        }  
                    }  
                }
                catch(Exception ex){
                    Log.e("socketUdp",ex.toString());  
                }
            }  
        };
        
        public void SendBuffer(byte[] buffer){
            try {
                serverSend =new DatagramSocket();
                DatagramPacket p = new DatagramPacket(buffer, buffer.length, local,5060);
                serverSend.send(p);
                serverSend.close();
                
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        public void CloseMe(){
            serverReceive.close();
        }
    }
    SocketUdp
  • 相关阅读:
    修改flex应用默认的装载界面 (转载)
    Map Tile 切图小工具 (转载)
    Virtual Earth Tile Image URI 参数解析(收集,学习VE插件必看)
    WorldWind学习系列十五:如何切割影像和DEM数据及其在WW中的应用配置
    ArcGIS Server建立缓存(切图)原理解析[图解] (转载)
    自制户外登山地图傻瓜书(转载)
    WorldWind学习系列十二:Measure插件学习
    MySQL备份
    aptitude包管理工具
    MySQL的Limit查询
  • 原文地址:https://www.cnblogs.com/huangzhen22/p/4803527.html
Copyright © 2011-2022 走看看