zoukankan      html  css  js  c++  java
  • 安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制

    安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制

    socket 连接采用流的方式进行发送接收数据,采用thread线程的方式。

    什么是线程? 
    这里写图片描述

    详细代码介绍:

    博文来源:http://blog.csdn.net/zhaocundang 如果你对代码有些疑问,请在下面留言来探讨,或者加我的QQ463431476一起学习进步!

      //线程mRunnable启动
            private Runnable    mRunnable   = new Runnable() 
                {
                    public void run()
                    {
                          try 
                        {               
                            //连接服务器
                            mSocketClient = new Socket(wifiurl,Integer.parseInt(wificom)); 
                            //取得输入、输出流
                            mBufferedReaderClient = new BufferedReader(new InputStreamReader(mSocketClient.getInputStream()));
                            mPrintWriterClient = new PrintWriter(mSocketClient.getOutputStream(), true);
                            recvMessageClient = "wifi成功连接";//消息换行
                        // Toast.makeText(getActivity(),"wifi连接成功",Toast.LENGTH_SHORT).show();
                            Message msg = new Message();
                            msg.what = 1;
                            mHandler.sendMessage(msg);               
                        }
                        catch (Exception e) 
                        {
                            recvMessageClient = "连接错误!";//消息换行
                            Message msg = new Message();
                            msg.what = 1;
                            mHandler.sendMessage(msg);
                            return;
                        }   
                          setRecvMessage();
                    }
                };
    
    
           public void setRecvMessage(){    
                char[] buffer = new char[256];
                int count = 0;
                while (true)
                {
                    try
                    {
                         if((count = mBufferedReaderClient.read(buffer))>0)
                        {                       
                            recvMessageClient = getInfoBuff(buffer, count);
                  //将接收的数据放入数组 Thread.sleep(500); Message msg = new Message(); msg.what = 1; mHandler.sendMessage(msg); } } catch (Exception e) { recvMessageClient = "接收异常:" + e.getMessage() + " ";//消息换行 Message msg = new Message(); msg.what = 0; mHandler.sendMessage(msg); } } } //handler用于线程中更新界面数据 Handler mHandler = new Handler() { public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what == 0) { Toast.makeText(getActivity(),recvMessageClient,Toast.LENGTH_SHORT).show();//刷新消息机制 } else if(msg.what == 1) { try { //// String result = recvMessageClient; // Toast.makeText(getActivity(),result,Toast.LENGTH_SHORT).show(); //接收消息的 String [] results = recvMessageClient.split("\.");; // Toast.makeText(getActivity(),results[3],Toast.LENGTH_SHORT).show(); //接收消息的 /* Intent intent=new Intent(); intent.putExtra("temp",results[0]); intent.putExtra("humi",results[2]); intent.setAction("zcd.netanything.temp"); getActivity().sendBroadcast(intent); */ }catch(Exception e) { // Toast.makeText(getActivity(),"无法获取数据,检查网络是否连接!",Toast.LENGTH_SHORT).show();//刷新消息机制 } } } }; //接收处理 private String getInfoBuff(char[] buff, int count) { char[] temp = new char[count]; for(int i=0; i<count; i++) { temp[i] = buff[i]; } return new String(temp); } /*public void onDestroy() { super.onDestroy(); if (isConnect) { isConnect = false; try { if(mSocketClient!=null) { mSocketClient.close(); mSocketClient = null; //mThreadvideo.destroy(); mPrintWriterClient.close(); mPrintWriterClient = null; recvMessageClient = "网络端口成功";//消息换行 Message msg = new Message(); msg.what = 0; mHandler.sendMessage(msg); } } catch (IOException e) { e.printStackTrace(); } mThreadClient.interrupt(); } } */

    按键触发,开启线程:

      public void onClick(View v) {
            // TODO Auto-generated method stub
            switch(v.getId()){
            case R.id.button1:
                mPrintWriterClient.print("f");
                //mPrintWriterClient.print("t");
                mPrintWriterClient.flush();//清空
             Toast.makeText(getActivity(),"前进",Toast.LENGTH_SHORT).show();
             break;
            case R.id.button2:
                 mPrintWriterClient.print("b");
                // mPrintWriterClient.print("t");
                 mPrintWriterClient.flush();
                 Toast.makeText(getActivity(),"后退",Toast.LENGTH_SHORT).show();
    
                break;
            case R.id.button3:
                mPrintWriterClient.print("l");
            //  mPrintWriterClient.print("t");
                mPrintWriterClient.flush();
                Toast.makeText(getActivity(),"向左",Toast.LENGTH_SHORT).show();
                break;
            case R.id.button4:
                mPrintWriterClient.print("r");
            //  mPrintWriterClient.print("t");
                mPrintWriterClient.flush();  
                Toast.makeText(getActivity(),"向右",Toast.LENGTH_SHORT).show();
                break;
            case R.id.button5:
                 if(!isConnect)
              {
                //开启mThreadClient线程
                mThreadClient = new Thread(mRunnable);
                mThreadClient.start(); 
               Toast.makeText(getActivity(),"尝试连接网络",500).show();
              }
              else {
                  onDestroy();
                  isConnect=false;
    
                 }
    
                break;
            //case R.id.button6:
                //关闭wifi
            /*  if (isConnect) 
                {               
                    isConnect = false;
                    try {
                        if(mSocketClient!=null)
                        {
                            mSocketClient.close();
                            mSocketClient = null;
                            //mThreadvideo.destroy();
                            mPrintWriterClient.close();
                            mPrintWriterClient = null;
                            recvMessageClient = "网络端口成功";//消息换行
                            Message msg = new Message();
                            msg.what = 0;
                            mHandler.sendMessage(msg);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    mThreadClient.interrupt();
                }
                 */
                //   break;
            }
        }  
    

    项目演示:

    APP控制小车视频演示

    APP物联系统视频演示

  • 相关阅读:
    前端常用js库地址
    react简介
    es6 decorator
    es6 之 class
    es6之对象扩展
    vs code 默认浏览器
    不同环境查看是否可访问外网、访问网址、ip地址、外网ip地址
    httprunner2简单了解,httprunner可实现的功能,jmeter均可实现,所以,未深入学习
    结构化问答
    《大数的认识》
  • 原文地址:https://www.cnblogs.com/zhaocundang/p/5606735.html
Copyright © 2011-2022 走看看