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 TCP 客户端(仅接收数据)的更多相关文章
- 网络编程--使用TCP协议发送接收数据
package com.zhangxueliang.tcp; import java.io.IOException; import java.io.OutputStream; import java. ...
- 24-ESP8266 SDK开发基础入门篇--Android TCP客户端.控制 Wi-Fi输出PWM的占空比,调节LED亮度
https://www.cnblogs.com/yangfengwu/p/11204436.html 刚才有人说需要点鸡汤.... 我想想哈;我还没问关于哪方面的鸡汤呢!!! 我所一直走的路线 第一: ...
- 23-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 加入消息处理
https://www.cnblogs.com/yangfengwu/p/11203546.html 先做接收消息 然后接着 public class MainActivity extends App ...
- 22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开
https://www.cnblogs.com/yangfengwu/p/11192618.html 有些很细致的东西参考这篇 https://www.cnblogs.com/yangfengwu ...
- socket tcp使用recv接收数据时,返回errno错误代码88
原因:就是recv函数的第一个参数不是可用的,也就是第一个参数不是建立连接时返回的文件描述符. 解决方法:xxx
- java 基于tcp客户端服务端发送接收数据
客户端: package demo03; import java.io.IOException; import java.io.InputStream; import java.io.OutputSt ...
- Java Socket 服务端发送数据 客户端接收数据
服务端: package com.thinkgem.wlw.modules.api.test.socket; /** * @Author: zhouhe * @Date: 2019/4/8 9:30 ...
- 【RL-TCPnet网络教程】第14章 RL-TCPnet之TCP客户端
第14章 RL-TCPnet之TCP客户端 本章节为大家讲解RL-TCPnet的TCP客户端实现,学习本章节前,务必要优先学习第12章TCP传输控制协议基础知识.有了这些基础知识之后,再搞本 ...
- 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高位和低位 ...
随机推荐
- maven项目报:An error occurred while filtering resources
maven项目在problem中报: An error occurred while filtering resources 解决方法: 右键项目-maven-update project..
- 如何使用matplotlib绘制一个函数的图像
我们经常会遇到这种情况,有一个数学函数,我们希望了解他的图像,这个时候使用python 的matplotlib就可以帮助我们. 用sigmoid函数来举个例子. sigmoid函数: 代码: impo ...
- javascript全局变量和局部变量
局部变量和全局变量可以同名.不过在函数体内部,局部变量的优先级高于全局变量.需要格外注意:专用于函数体内部的变量一定要用var关键字声明,否则该变量会变成全局变量.因为js是弱类型语言,所以它可以存放 ...
- NSBundle常用方法及解释
1.使用类方法创建一个NSBundler对象+ (NSBundle *)mainBundle;eg:[NSBundle mailBundle];2.使用路径获取一个NSBundle 对象,这个路径应该 ...
- phpstorm设置
phpstorm版本为10.0.3,设置自动换行如下: 快捷方式: 打开新的文件:ctrl+shift+N 格式化:ctrl+alt+L 全局搜索:ctrl+shift+F 更换默认快捷键如下,其实右 ...
- webstorm11怎么设置成sublime3的界面
引入架包导入即可 下载路径:https://github.com/OtaK/jetbrains-monokai-sublime
- zabbix nagios 类nagios 之 不以性能为前提的开发和监控都是瞎扯淡
从最初的nagios到现在强大的zabbix 3.0,我想说,不以性能为前提的开发和监控都是瞎扯淡? 首先我对这两款监控软件的认识: zabbix,很多企业都在用,给人的感觉是很炫,不过我个人觉得虽然 ...
- HashMap学习
HashMap<String, Object> java.util.HashMap<String, Object> 在数组中我们是通过数组下标来对其内容索引的,而在Map中 ...
- Excel列名 字母和数字的转换
Excel的列名是由于字母组成的. A-Z 分别代表1-26 AA 是27 AB是28 以此类推. 以下是这种编码的转换方法,如果遇到需要用纯字母编号来表示数字的时候可以用到. /** * 类似EX ...
- tomcat(三)--基本安装配置
0x01 JDK和Tomcat安装 到oracle官网下载jdk,当前下载的版本是Linux x64 jdk-8u101-linux-x64.tar.gz 到apache官网下载tomcat,当前最 ...