关于Java Socket编程中遇到的问题与解决方法

场景:

实现从某一数据端(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

 

你可能感兴趣的:(学习笔记,问答,反思)