当前位置: 移动技术网 > IT编程>移动开发>Android > Android实现TCP客户端接收数据的方法

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

败犬男大联盟,贝尔带你去冒险,张兆艺

本文实例讲述了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程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网