android socket 线程连接openwrt与arduino单片机串口双向通信

简介: package zcd.netanything; import java.io.BufferedReader; import java.io.InputStreamReader; import java.
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; } } }

 

目录
相关文章
|
Java Android开发 UED
🧠Android多线程与异步编程实战!告别卡顿,让应用响应如丝般顺滑!🧵
【7月更文挑战第28天】在Android开发中,确保UI流畅性至关重要。多线程与异步编程技术可将耗时操作移至后台,避免阻塞主线程。我们通常采用`Thread`类、`Handler`与`Looper`、`AsyncTask`及`ExecutorService`等进行多线程编程。
167 2
|
Java Android开发
Android面试题经典之Glide取消加载以及线程池优化
Glide通过生命周期管理在`onStop`时暂停请求,`onDestroy`时取消请求,减少资源浪费。在`EngineJob`和`DecodeJob`中使用`cancel`方法标记任务并中断数据获取。当网络请求被取消时,`HttpUrlFetcher`的`cancel`方法设置标志,之后的数据获取会返回`null`,中断加载流程。Glide还使用定制的线程池,如AnimationExecutor、diskCacheExecutor、sourceExecutor和newUnlimitedSourceExecutor,其中某些禁止网络访问,并根据CPU核心数动态调整线程数。
406 2
|
11月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
Java 关系型数据库 MySQL
如何用java的虚拟线程连接数据库
本文介绍了如何使用Java虚拟线程连接数据库,包括设置JDK版本、创建虚拟线程的方法和使用虚拟线程连接MySQL数据库的示例代码。
241 6
如何用java的虚拟线程连接数据库
|
12月前
|
API Android开发 iOS开发
深入探索Android与iOS的多线程编程差异
在移动应用开发领域,多线程编程是提高应用性能和响应性的关键。本文将对比分析Android和iOS两大平台在多线程处理上的不同实现机制,探讨它们各自的优势与局限性,并通过实例展示如何在这两个平台上进行有效的多线程编程。通过深入了解这些差异,开发者可以更好地选择适合自己项目需求的技术和策略,从而优化应用的性能和用户体验。
|
Java 数据库 Android开发
一个Android App最少有几个线程?实现多线程的方式有哪些?
本文介绍了Android多线程编程的重要性及其实现方法,涵盖了基本概念、常见线程类型(如主线程、工作线程)以及多种多线程实现方式(如`Thread`、`HandlerThread`、`Executors`、Kotlin协程等)。通过合理的多线程管理,可大幅提升应用性能和用户体验。
463 15
一个Android App最少有几个线程?实现多线程的方式有哪些?
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
203 4
【通信协议讲解】单片机基础重点通信协议解析与总结之串口通信(三)
【通信协议讲解】单片机基础重点通信协议解析与总结之串口通信(三)
196 1
|
Java 数据库 Android开发
一个Android App最少有几个线程?实现多线程的方式有哪些?
本文介绍了Android应用开发中的多线程编程,涵盖基本概念、常见实现方式及最佳实践。主要内容包括主线程与工作线程的作用、多线程的多种实现方法(如 `Thread`、`HandlerThread`、`Executors` 和 Kotlin 协程),以及如何避免内存泄漏和合理使用线程池。通过有效的多线程管理,可以显著提升应用性能和用户体验。
349 11
|
Java Android开发 UED
🧠Android多线程与异步编程实战!告别卡顿,让应用响应如丝般顺滑!🧵
在Android开发中,为应对复杂应用场景和繁重计算任务,多线程与异步编程成为保证UI流畅性的关键。本文将介绍Android中的多线程基础,包括Thread、Handler、Looper、AsyncTask及ExecutorService等,并通过示例代码展示其实用性。AsyncTask适用于简单后台操作,而ExecutorService则能更好地管理复杂并发任务。合理运用这些技术,可显著提升应用性能和用户体验,避免内存泄漏和线程安全问题,确保UI更新顺畅。
416 5

热门文章

最新文章