实现从某一数据端(pc机:Linux或Windows),实时将数据发送到手机上显示,这一基础功能.
如何实现? 为保证数据传递的实时性,和本身知识积累的薄弱,决定使用socket编程来实现功能.
结构? c/s架构是一个很想当然的结果.
如何解决从数据段传输到手机,socket编程必须需要知道对方ip这一问题? 考虑过使用花生壳的内网穿透功能,来绑定数据端到手机端. 手头有一个云服务器,还是决定写一个中间转发数据的部分部署到vps上,更稳定.
一
对app的构思: 比较简单的一个activity就行了.
布局:主要使用了线性和相对布局 ,线性布局在整体划分上非常好用(可以使用weight属性来调配比例), 相对布局主要用于小控件的布局.....
功能:主要使用handle和socket编程 由于数据不断更新,也简单,所以使用TextViwer来显示,并用setText更新 在学的过程中看到书上的简单样例都是类似聊天室的demo , 都是使用的handle作为传输接口 , message作为传输的类,搜索发现这是为了UI线程和通讯线程必须不能放在一起且为了线程间通讯 , 而提供的类方法
二
对服务器端的构思:仅仅实现从数据端到服务器端的转输
代码:https://github.com/yangh110/Data_Show.git
1,开始为了把书上的代码该为自己的所以 , 选择了抄tcp连接 , 而且为验证而设计的时间发送的demo成功了就进行下一步. (在将项目编译成jar包并部署到服务器的步骤遇到了不少问题 , 写在了下边)
2,完成以上实验后 , 使用一个调试助手作为数据发送端 , 为了重连而改用UDP , 发送了一组字符串到服务器并显示到app的demo
3,完成以上之后,准备字符处理并于布局相适应
1 服务器java环境问题? : pc上java编译环境,是java11 , 而服务器上openjdk的版本是Java8 , java只能低版本在高版本上运行,所以编译环境又去下了一个Java8 , 最近Oracle下载需要注册了,还贼慢
2 让程序后台运行? 使用screen命令
3 app重新连接问题? 当时用tcp连接,还正常一段时间 , 可惜没有保存代码 ,而后就产生了管道阻塞的情况 . 异常如下: java.net.SocketException: Connection reset .java.net.SocketException: Broken pipe (Write failed) 原因就是一端关闭后重连
参考:https://my.oschina.net/xsh1208/blog/496419
参考2:https://blog.csdn.net/qq_20889581/article/details/52402088
我的解决方法:使用udp , 客户端使用固定端口 , 这样每次就可以知道对方的地址(略有抽风)
1,布局参看Android布局,view控件
2,网络通讯问题即java.socket编程
3,遇到的服务端编译成jar包时,注意项目建立过程,原理仍然不知道
4,服务器java运行环境搭建
5,环境搭建完毕,准备app后台的socket编程
6,java程序运行正常,但是Andorid端没有显示,调试下
只能从整个机制来阅读了
7,充满玄学的解决了问题,重写一遍就好了。
进入下一阶段,看是从pc机上向服务器传递数据。
8,服务器桥接,pc机到Android端实验成功。
下一阶段进行,数据的传递,为了方便利用字符串进行传递,在Android端进行字符串处理
然后显示.
9 桥接后,app关闭时从新开启测试, socket关闭问题,先调试好
java.net.SocketException: Broken pipe (Write failed)
10 mqtt可做参考
11 使用udp,客户端绑定一个端口就可以重连了2019/7/28