欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实现TCP客户端接收数据的方法

程序员文章站 2024-03-31 14:25:04
本文实例讲述了android实现tcp客户端接收数据的方法。分享给大家供大家参考,具体如下: 配合log4net使用,用来接收调试信息。因此,此客户端只管通过tcp接收字...

本文实例讲述了android实现tcp客户端接收数据的方法。分享给大家供大家参考,具体如下:

配合log4net使用,用来接收调试信息。因此,此客户端只管通过tcp接收字符串数据,然后显示在界面上。

接收tcp数据

try {
  socket s = new socket("192.168.1.5", 8240);
  inputstream inputstream = s.getinputstream();
  datainputstream input = new datainputstream(inputstream);
  byte[] b = new byte[10000];
  while(true)
  {
    int length = input.read(b);
    string msg = new string(b, 0, length, "gb2312");
    log.v("data",msg);
  }
}catch(exception ex)
{
  ex.printstacktrace();
}

开线程执行接收操作  

但是,如果接收代码直接放ui按钮处理事件中,将直接引发networkonmainthreadexception,这是因为不能在主线程中执行socket操作。这里使用asynctask开另一个线程执行socket操作。

// activity按钮事件中
getlogtask task = new getlogtask();
task.execute(null);
// activity类中嵌套类
public class getlogtask extends asynctask<void,void,string>
{
  @override
  protected string doinbackground(void...param){
      try {
      socket s = new socket("192.168.1.5", 8240);
      inputstream inputstream = s.getinputstream();
      datainputstream input = new datainputstream(inputstream);
      byte[] b = new byte[10000];
      while(true)
      {
        int length = input.read(b);
        string msg = new string(b, 0, length, "gb2312");
        log.v("data",msg);
      }
    }catch(exception ex)
    {
      ex.printstacktrace();
    }
    return "";
  }
}

asynctask与界面线程通信

1、界面需要启动和暂停tcp接收操作。
界面线程使用asynctask.cancel()通知接收线程结束接收操作。
接收线程在doinbackground中调用iscancelled()来检查是否出现结束接收要求。

2、asynctask接收到数据之后,传递给界面显示。

接收线程使用handler将数据传递给界面
使用handler的话,数据作为“消息”传递给界面处理。
handler包括了处理消息功能和发布消息功能。在这里,处理消息就是在界面上显示log文本,界面线程来干。发布消息就是将log文本作为参数,调用postmessage功能,接收线程来干。

主线程中的处理消息

handler handler = new handler(){
  @override
  public void handlemessage(message msg){
    text.settext(text.gettext().tostring()+(string)msg.obj);
  }
};

接收线程中的发布消息

message msg = new message();
msg.obj = msgstring;
(mainactivity.this).handler.postmessage();

以上就构成了一个简单,但可用的tcp方式的log接收端。拿个360wifi或者小米wifi,就可以使用手机接收pc应用程序发出来的log了。

更多关于android相关内容感兴趣的读者可查看本站专题:《android通信方式总结》、《android调试技巧与常见问题解决方法汇总》、《android开发入门与进阶教程》、《android多媒体操作技巧汇总(音频,视频,录音等)》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。