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
  • 相关阅读:
    SharePoint 2013 商务智能报表发布
    sharepoint designer web 服务器似乎没有安装microsoft sharepoint foundation
    SharePoint 2013 Designer系列之数据视图
    SharePoint 2013 Designer系列之数据视图筛选
    SharePoint 2013 Designer系列之自定义列表表单
    SharePoint 2013 入门教程之创建及修改母版页
    SharePoint 2013 入门教程之创建页面布局及页面
    SharePoint 2010 级联下拉列表 (Cascading DropDownList)
    使用SharePoint Designer定制开发专家库系统实例!
    PL/SQL Developer 建立远程连接数据库的配置 和安装包+汉化包+注册机
  • 原文地址:https://www.cnblogs.com/huangzhen22/p/4803527.html
Copyright © 2011-2022 走看看