配合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 TCP 客户端(仅接收数据)的更多相关文章

  1. 网络编程--使用TCP协议发送接收数据

    package com.zhangxueliang.tcp; import java.io.IOException; import java.io.OutputStream; import java. ...

  2. 24-ESP8266 SDK开发基础入门篇--Android TCP客户端.控制 Wi-Fi输出PWM的占空比,调节LED亮度

    https://www.cnblogs.com/yangfengwu/p/11204436.html 刚才有人说需要点鸡汤.... 我想想哈;我还没问关于哪方面的鸡汤呢!!! 我所一直走的路线 第一: ...

  3. 23-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 加入消息处理

    https://www.cnblogs.com/yangfengwu/p/11203546.html 先做接收消息 然后接着 public class MainActivity extends App ...

  4. 22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

    https://www.cnblogs.com/yangfengwu/p/11192618.html 有些很细致的东西参考这篇   https://www.cnblogs.com/yangfengwu ...

  5. socket tcp使用recv接收数据时,返回errno错误代码88

    原因:就是recv函数的第一个参数不是可用的,也就是第一个参数不是建立连接时返回的文件描述符. 解决方法:xxx

  6. java 基于tcp客户端服务端发送接收数据

    客户端: package demo03; import java.io.IOException; import java.io.InputStream; import java.io.OutputSt ...

  7. Java Socket 服务端发送数据 客户端接收数据

    服务端: package com.thinkgem.wlw.modules.api.test.socket; /** * @Author: zhouhe * @Date: 2019/4/8 9:30 ...

  8. 【RL-TCPnet网络教程】第14章 RL-TCPnet之TCP客户端

    第14章      RL-TCPnet之TCP客户端 本章节为大家讲解RL-TCPnet的TCP客户端实现,学习本章节前,务必要优先学习第12章TCP传输控制协议基础知识.有了这些基础知识之后,再搞本 ...

  9. 18-ESP8266 SDK开发基础入门篇--TCP 服务器 RTOS版,串口透传,TCP客户端控制LED

    https://www.cnblogs.com/yangfengwu/p/11112015.html 先规定一下协议 aa 55 02 01 F1 4C 控制LED点亮  F1 4C为CRC高位和低位 ...

随机推荐

  1. UI设计趋势:渐变设计风格重新回归主流

    在扁平化设计刚刚兴起之时,渐变是设计师们避之不及的设计手法,然而今天它已经正式回归.几乎是在一夜之间,无数的网站开始使用渐变色. 从背景到图片上的色彩叠加,包括UI元素上所遮盖的色彩,所有的这一切都表 ...

  2. css总结

    1. css中的role属性 html 里面的 role 本质上是增强语义性,当现有的HTML标签不能充分表达语义性的时候,就可以借助role来说明.通常这种情况出现在一些自定义的组件上,这样可增强组 ...

  3. lnode满,维护记录

    df  17% 正常 df -i 100% inode耗尽. | uniq -c 查出占用lnode最大的目录是 /var/spool/exim4/input 居然有15W多个小文件 exim4是邮件 ...

  4. json 数据 添加 删除 排序

    js数据格式和json数据格式,各有各的用处,就个人而言,json更好用一点,js自身的数组和对像限制比较多. 以js的数组举例: var a = ['1']; a[5] = 52; a.length ...

  5. python获取路径

    #!/usr/bin/env python import os #文件所在路径(模块路径) print __file__,os.path.realpath(__file__),os.path.absp ...

  6. lightoj 1427 - Substring Frequency (II) AC自动机

    模板题,找来测代码. 注意有相同单词 //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<c ...

  7. linux环境下jdk的安装步骤

    JDK的安装步骤:1. 把jdk文件cp到服务器上2. 加权限 chmod +x 文件3. 执行 ./4.修改配置 vi /etc/profile 最后一行添加:export  JAVA_HOME=/ ...

  8. 学习html心得

    最近我们小组在搞一个网站项目,每个组员都在学习html与css. 我们先找到相关网站寻找信息进行学习,内容不多,我很快就把html的教程看完了.感觉还不错,就下载了html编辑器Notepad++进行 ...

  9. VBA操作单元格

    行或列的Group化 ws.Rows("row1:row2").group row1:Group化的开始行                row2:Group化的结束行 ws.Co ...

  10. lphp输出控制output controll(header, ob_xxx)

    关于php的output controll参考文档: http://gywbd.github.io/posts/2015/1/php-output-buffer-in-deep.html http:/ ...