Android Socket 线程连接openwrt与arduino单片机串口双向通信的实例解析
废话不多说了,直接给大家贴代码了,具体代码如下所示:
packagezcd.netanything;
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
importjava.io.PrintWriter;
importjava.net.Socket;
importandroid.app.Fragment;
importandroid.content.BroadcastReceiver;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.view.ViewGroup;
importandroid.widget.Toast;
publicclassMyCarextendsFragmentimplementsOnClickListener{
privatestaticStringwifiurl;
privatestaticStringwificom;
privatestaticStringwificamera;
privateThreadmThreadClient=null;
privateSocketmSocketClient=null;
//视频线程
privateThreadmThreadvideo=null;
privateStringrecvMessageClient;
//MySurfaceViewr;
privatebooleanisConnect=false;
//指令发出数据缓存
staticPrintWritermPrintWriterClient=null;
staticBufferedReadermBufferedReaderClient=null;
publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,
BundlesavedInstanceState){
//TODOAuto-generatedmethodstub
Viewview=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);
returnview;
}
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
}
//内部类广播接收
publicstaticclassmyReceiverextendsBroadcastReceiver{
@Override
publicvoidonReceive(Contextcontext,Intentintent){
//TODOAuto-generatedmethodstub
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启动
privateRunnablemRunnable=newRunnable()
{
publicvoidrun()
{
try
{
//连接服务器
mSocketClient=newSocket(wifiurl,Integer.parseInt(wificom));
//取得输入、输出流
mBufferedReaderClient=newBufferedReader(newInputStreamReader(mSocketClient.getInputStream()));
mPrintWriterClient=newPrintWriter(mSocketClient.getOutputStream(),true);
recvMessageClient="wifi成功连接";//消息换行
Messagemsg=newMessage();
msg.what=1;
mHandler.sendMessage(msg);
}
catch(Exceptione)
{
recvMessageClient="连接错误!";//消息换行
Messagemsg=newMessage();
msg.what=1;
mHandler.sendMessage(msg);
return;
}
setRecvMessage();
}
};
publicvoidsetRecvMessage(){
char[]buffer=newchar[256];
intcount=0;
while(true)
{
try
{
if((count=mBufferedReaderClient.read(buffer))>0)
{
recvMessageClient=getInfoBuff(buffer,count);//消息换行
//Thread.sleep(500);
Messagemsg=newMessage();
msg.what=1;
mHandler.sendMessage(msg);
//Toast.makeText(getActivity(),recvMessageClient,Toast.LENGTH_SHORT).show();
}
}
catch(Exceptione)
{
recvMessageClient="接收异常:"+e.getMessage()+"\n";//消息换行
Messagemsg=newMessage();
msg.what=0;
mHandler.sendMessage(msg);
}
}
}
HandlermHandler=newHandler()
{
publicvoidhandleMessage(Messagemsg)
{
super.handleMessage(msg);
if(msg.what==0)
{
Toast.makeText(getActivity(),recvMessageClient,Toast.LENGTH_SHORT).show();//刷新消息机制
}
elseif(msg.what==1)
{
try
{
Stringresult=recvMessageClient;
Toast.makeText(getActivity(),result,Toast.LENGTH_SHORT).show();
}catch(Exceptione)
{
//Toast.makeText(getActivity(),"无法获取数据,检查网络是否连接!",Toast.LENGTH_SHORT).show();//刷新消息机制
}
}
}
};
//接收处理
privateStringgetInfoBuff(char[]buff,intcount)
{
char[]temp=newchar[count];
for(inti=0;i<count;i++)
{
temp[i]=buff[i];
}
returnnewString(temp);
}
/*publicvoidonDestroy(){
super.onDestroy();
if(isConnect)
{
isConnect=false;
try{
if(mSocketClient!=null)
{
mSocketClient.close();
mSocketClient=null;
//mThreadvideo.destroy();
mPrintWriterClient.close();
mPrintWriterClient=null;
recvMessageClient="网络端口成功";//消息换行
Messagemsg=newMessage();
msg.what=0;
mHandler.sendMessage(msg);
}
}catch(IOExceptione){
e.printStackTrace();
}
mThreadClient.interrupt();
}
}
*/
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
switch(v.getId()){
caseR.id.button1:
mPrintWriterClient.print("f");
mPrintWriterClient.flush();//清空
Toast.makeText(getActivity(),"前进",Toast.LENGTH_SHORT).show();
break;
caseR.id.button2:
mPrintWriterClient.print("b");
mPrintWriterClient.flush();
Toast.makeText(getActivity(),"后退",Toast.LENGTH_SHORT).show();
break;
caseR.id.button3:
mPrintWriterClient.print("l");
mPrintWriterClient.flush();
Toast.makeText(getActivity(),"向左",Toast.LENGTH_SHORT).show();
break;
caseR.id.button4:
mPrintWriterClient.print("r");
mPrintWriterClient.flush();
Toast.makeText(getActivity(),"向右",Toast.LENGTH_SHORT).show();
break;
caseR.id.button5:
if(!isConnect)
{
//开启mThreadClient线程
mThreadClient=newThread(mRunnable);
mThreadClient.start();
Toast.makeText(getActivity(),"尝试连接网络",500).show();
}
else{
onDestroy();
isConnect=false;
//Btn_openwifi.setBackgroundResource(R.drawable.disconnect);
}
//开启mThreadvideo线程
//mThreadvideo=newThread(mRunvideo);
//mThreadvideo.start();//开启视频监听
break;
//caseR.id.button6:
//关闭wifi
/*if(isConnect)
{
isConnect=false;
try{
if(mSocketClient!=null)
{
mSocketClient.close();
mSocketClient=null;
//mThreadvideo.destroy();
mPrintWriterClient.close();
mPrintWriterClient=null;
recvMessageClient="网络端口成功";//消息换行
Messagemsg=newMessage();
msg.what=0;
mHandler.sendMessage(msg);
}
}catch(IOExceptione){
e.printStackTrace();
}
mThreadClient.interrupt();
}
*/
//break;
}
}
}
以上所述是小编给大家介绍的AndroidSocket线程连接openwrt与arduino单片机串口双向通信,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!