程序员

Socket在与安卓交互

2018-04-21  本文已影响0人  阿里高级软件架构师

如果我们想在安卓端进行socket开发,那你就必须看我上一篇socket介绍

现在我们来开发:

第一步:添加权限

<android permission :android:name="android.permission.INTERNET"/> 

第二部步:代码分析

开发思路:

      socket通信毕竟是网络通信,所以一定 是耗时操作,因此我们要开线程,我们可以自己写一个类继承Tread这个类,添加这个构造方法,传入参数,因为我们是向服务器发送消息嘛,把参数传入进来,我们通过对这个参数进行编程就可以了

我们要用到 的主要的类是Socket,我们先在activity里面声明初始化,然后在MyThread里面new出来,传入InetSocketAddress()对象,里面填入的参数有通信 的ip地址和超时时间,然后通过socket进行流操作

OutputStream ou = socket.getOutputStream();                 

 BufferedReader bff = new BufferedReader(new InputStreamReader(socket.getInputStream()));  

后面的都很简单,就不介绍了=.=

class MyThread extends Thread {  

     public String txt1;      

      public MyThread(String str) {        

      txt1 = str;         

 }            

@Override         

 public void run() {            

  //定义消息            

  Message msg = new Message();            

  msg.what = 0x11;              

Bundle bundle = new Bundle();             

 bundle.clear();             

 try {      

 //连接服务器 并设置连接超时为5秒                 

 socket = new Socket();                  

socket.connect(new InetSocketAddress("1.1.9.30", 30000), 5000);                  

//获取输入输出流                  

OutputStream ou = socket.getOutputStream();                 

 BufferedReader bff = new BufferedReader(new InputStreamReader(socket.getInputStream()));                  //读取发来服务器信息                

  String line = null;                 

 buffer="";                 

 while ((line = bff.readLine()) != null) {                      

buffer = line + buffer;               

   }                                  

  //向服务器发送信息                  

ou.write("android 客户端".getBytes("gbk"));                

 ou.flush();               

   bundle.putString("msg", buffer.toString());                  

msg.setData(bundle);                  //发送消息 修改UI线程中的组件                

  myHandler.sendMessage(msg);                  //关闭各种输入输出流                 

 bff.close();                  

ou.close();                 

 socket.close();             

 } catch (SocketTimeoutException aa) {                  //连接超时 在UI界面显示消息                 

 bundle.putString("msg", "服务器连接失败!请检查网络是否打开");                 

 msg.setData(bundle);                  //发送消息 修改UI线程中的组件                  

myHandler.sendMessage(msg);             

 } catch (IOException e) {                

  e.printStackTrace();           

   }         

 }    

  }  

上一篇下一篇

猜你喜欢

热点阅读