package zcd.netanything;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

import android.app.Fragment;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Toast;

public class MyCar extends Fragment implements OnClickListener{

    private static String wifiurl;
    private static String wificom;
    private static String wificamera;
    private Thread mThreadClient = null;
    private Socket mSocketClient = null;
    //视频线程
    private Thread mThreadvideo = null;
    private  String recvMessageClient ;
    //MySurfaceView r;
    private  boolean isConnect=false;
    //指令发出  数据缓存
    static PrintWriter mPrintWriterClient = null;
    static BufferedReader mBufferedReaderClient    = null;

     public View onCreateView(LayoutInflater inflater, ViewGroup container,
         Bundle savedInstanceState) {
     // TODO Auto-generated method stub
     View view = inflater.inflate(R.layout.mycar,container, false);
     view.findViewById(R.id.button1).setOnClickListener(this);
     view.findViewById(R.id.button2).setOnClickListener(this);
     view.findViewById(R.id.button3).setOnClickListener(this);
     view.findViewById(R.id.button4).setOnClickListener(this);
     view.findViewById(R.id.button5).setOnClickListener(this);

     return view;
     }

       public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

   }

        //内部类  广播接收
       public static  class myReceiver extends BroadcastReceiver {
           @Override
          public void onReceive(Context context, Intent intent) {
                     // TODO Auto-generated method stub
                     wifiurl = intent.getStringExtra("wifiurl");
                       wificom = intent.getStringExtra("wificom");
                       wificamera = intent.getStringExtra("wificamera");
                        Toast.makeText(context, "广播已经接收", Toast.LENGTH_SHORT).show();
               }
          }

//来源 http://www.cnblogs.com/xiaobo-Linux/ 赵存档 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成功连接";//消息换行
                        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);
                     //Toast.makeText(getActivity(),recvMessageClient,Toast.LENGTH_SHORT).show();
                    }
                }
                catch (Exception e)
                {
                    recvMessageClient = "接收异常:" + e.getMessage() + "\n";//消息换行
                    Message msg = new Message();
                    msg.what = 0;
                    mHandler.sendMessage(msg);
                }
            }
       }

            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(); 

                        }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.flush();//清空
            Toast.makeText(getActivity(),"前进",Toast.LENGTH_SHORT).show();
         break;
        case R.id.button2:
             mPrintWriterClient.print("b");
             mPrintWriterClient.flush();
             Toast.makeText(getActivity(),"后退",Toast.LENGTH_SHORT).show();
            break;
        case R.id.button3:
            mPrintWriterClient.print("l");
            mPrintWriterClient.flush();
                Toast.makeText(getActivity(),"向左",Toast.LENGTH_SHORT).show();
                break;
        case R.id.button4:
            mPrintWriterClient.print("r");
            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;
                // Btn_openwifi.setBackgroundResource(R.drawable.disconnect);
             }

                //开启mThreadvideo线程
                  //mThreadvideo = new Thread(mRunvideo);
                  //mThreadvideo.start();//开启视频监听
            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;
        }
    }  

}
 

android socket 线程连接openwrt与arduino单片机串口双向通信的更多相关文章

  1. android端 socket长连接 架构

    看过包建强的<App研发录>之后对其中的基础Activity类封装感到惊讶,一直想找一种方式去解决关于app中使用socket长连接问题,如何实现简易的封装来达到主活动中涉及socket相 ...

  2. android socket编程用Bufferreader读取的一个失败教训

    由于我的手机需要用笔记本开的wifi,躺在床上玩手机时需要关电脑或者是要让电脑放歌的时候总是不想下床,于是我想能不能用一个APP,然后通过局域网实现在手机上对电脑进行操控呢?说干就干. 我在电脑上用的 ...

  3. Android Socket编程学习笔记

    http://blog.csdn.net/eyu8874521/article/details/8847173 度娘给出的描述:通常也称作"套接字",用于描述IP地址和端口,是一个 ...

  4. Android Socket编程基础

    前些天写了一个Android手机在局域网内利用Wifi进行文件传输的Demo,其中用到了Socket编程,故此总结(盗了网友的一些图和文字).好久好久没来博客园了~~ 1.什么是Socket? soc ...

  5. Android与路由器连接服务

    界面UI: package my.work.Library; import java.util.Timer; import java.util.TimerTask; import java.util. ...

  6. Arduino单片机使用和开发问题记录(转)

    源:Arduino单片机使用和开发问题记录 1.将程序上传到板子时Arduino IDE提示“avrdude: stk500_getsync(): not in sync: resp=0x00” 网上 ...

  7. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不 ...

  8. Android Socket

    Android Socket 参考资料 菜鸟教程 怎么理解TCP的面向连接和UDP的无连接 https://www.cnblogs.com/xiaomayizoe/p/5258754.html htt ...

  9. Android Socket通信详解

    一.Socket通信简介  Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客 ...

随机推荐

  1. 我为NET狂官方群福利贴:一些常用的工具:2016-08-01更新

    本次更新下载:http://pan.baidu.com/s/1skXzG4H 源码文档见官方群(以下为8.1更新内容) 逆天工具 CDN 资源库 国内 http://www.bootcdn.cn/ h ...

  2. jQuery源码学习感想

    还记得去年(2015)九月份的时候,作为一个大四的学生去参加美团霸面,结果被美团技术总监教育了一番,那次问了我很多jQuery源码的知识点,以前虽然喜欢研究框架,但水平还不足够来研究jQuery源码, ...

  3. 【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)

    Oracle 11G RAC数据库安装(八) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...

  4. 初谈SQL Server逻辑读、物理读、预读

    前言 本文涉及的内容均不是原创,是记录自己在学习IO.执行计划的过程中学习其他大牛的博客和心得并记录下来,之所以想写下来是为了记录自己在追溯的过程遇到的几个问题,并把这些问题弄清楚. 本章最后已贴出原 ...

  5. Apworks框架实战(四):使用Visual Studio开发面向经典分层架构的应用程序:从EasyMemo案例开始

    时隔一年,继续我们的Apworks框架之旅.在接下来的文章中,我将逐渐向大家介绍如何在Visual Studio中结合Apworks框架,使用ASP.NET Web API和MVC来开发面向经典分层架 ...

  6. 使用Beautiful Soup编写一个爬虫 系列随笔汇总

    这几篇博文只是为了记录学习Beautiful Soup的过程,不仅方便自己以后查看,也许能帮到同样在学习这个技术的朋友.通过学习Beautiful Soup基础知识 完成了一个简单的爬虫服务:从all ...

  7. React Native环境搭建以及几个基础控件的使用

    之前写了几篇博客,但是没有从最基础的开始写,现在想了想感觉不太合适,所以现在把基础的一些东西给补上,也算是我从零开始学习RN的经验吧! 一.环境搭建 首先声明一下,本人现在用的编辑器是SublimeT ...

  8. python爬虫成长之路(一):抓取证券之星的股票数据

    获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为python3.5,意在抓取证券之星上当天所 ...

  9. MySQL动态字符串处理DYNAMIC_STRING

    MySQL中,常常会看到一些关于动态字符串的处理,列如:DYNAMIC_STRING. 为了记录动态字符串的实际长度,缓冲区的最大长度,以及每次字符串需要调整时,及时分配新的内存,以及调整长度.MyS ...

  10. sencha ext js 6 入门

    Sencha Ext JS号称是目前世界上最先进和最强大的.支持多平台多设备的JavaScript应用程序开发框架.首先看一下Ext JS的发展简史. 1 Ext JS发展简史 YUI-Ext的作者J ...