Android UDP协议发送和接收

仅记录代码


public class UDPUtils implements Runnable {


    public boolean keepRunning = true;//线程开始标志
    public static final String TAG = "UDPUtils";

    //本机监听的端口

    //发送的消息
    private String message = "test";

    //服务器接收的消息
    private String receive;

    //Handler传递的数据
    private Message msg;
    //Message传递的Buddle参数
    private Bundle bundle;

    //wifi名和密码
    private String SSID, password;
    private Handler mHandler;

    public UDPUtils(Handler handler) {
        mHandler = handler;
    }


    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }


    /**
     * 线程停止标志
     *
     * @param keepRunning
     */
    public void setKeepRunning(boolean keepRunning) {
        this.keepRunning = keepRunning;
    }

    public boolean getKeepRunning() {
        return this.keepRunning;
    }


    /**
     * 服务端监听程序
     */
    public void StartListen() {
        keepRunning = getKeepRunning();
        DatagramSocket socket = null;
        byte[] data = new byte[1024];
        DatagramPacket packet = new DatagramPacket(data, data.length);

        try {
            socket = new DatagramSocket(LOCAL_PORT);
            socket.setBroadcast(true);
            Log.i(TAG, "socket");
//          socket.setSoTimeout(200);
        } catch (Exception e) {
            e.printStackTrace();
            return;
        }

        while (keepRunning) {
            try {
                //等待客户机连接
                packet.setData(data);
                Log.e(TAG, "receive0");
                socket.receive(packet);
                receive = new String(packet.getData(), 0, packet.getLength());

                msg = new Message();
                bundle = new Bundle();

                //把数据放到buddle中
                bundle.putString("receive", receive);
                //把buddle传递到message
                msg.setData(bundle);
                mHandler.sendMessage(msg);

            } catch (Exception e) {
                continue;
            }
        }

        if (socket != null) {
            socket.close();
            socket = null;
        }
    }


    public void sendControInfo(String message) {

        try {
            DatagramSocket sendSocket = new DatagramSocket();

            byte[] configInfo = message.getBytes();

            InetAddress ip = InetAddress.getByName(SERVER_IP);  //即目的IP
            DatagramPacket sendPacket = new DatagramPacket(configInfo, configInfo.length, ip, SERVER_PORT);// 创建发送类型的数据报:

            sendSocket.send(sendPacket);    // 通过套接字发送数据:

            sendSocket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        StartListen();
    }
}

在调用的地方如下:

 @Override
    public void initData(Bundle savedInstanceState) {
        super.initData(savedInstanceState);

        udpUtils = new UDPUtils(myHandler);
        thread = new Thread(udpUtils);
        thread.start();

        //发送UDP指令的函数
        sendUdpMsg();
    }


private void sendUdpMsg() {

        new Thread() {
            @Override
            public void run() {
                udpUtils.sendControInfo(GET_CONFIG_FILE_DATA);
            }
        }.start();
        
//        thread = new Thread(udpUtils);
//        thread.start();
    }



    //利用Handler将接收的数据实时打印出来
    Handler myHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Bundle bundle = new Bundle();
//从传过来的message数据中取出传过来的绑定数据的bundle对象
            bundle = msg.getData();
            String receive = bundle.getString("receive");
            Log.i(TAG, "收到消息了: " + receive);
        }
    };

调试软件,Windows版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值