概述
在使用Android开发智能设备时,一般会分为用于遥控与管理的Host端,和用于执行个性功能的Slave端,二者可以借助网络或蓝牙等途径实现通信。
协议:计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议。
本文介绍的就是网络通信。(类似应用商城里的 电视超人 app)
前提条件: ip 地址
借助网络通信,就需要知道对方的 ip 地址,而常见的网络环境中的 ip 地址一般都是通过 DHCP 服务动态分配的, 所以事先没法知道对方的 ip。
查询对方 ip 地址
为了确认对方的地址, 可以通过向局域网内发送查找设备的广播,收到广播的 Slave 端就知道了 Host 的 ip 地址,在向 Host 端发送应答包后,双方就都知道了对方的 ip。
局域网设备的通信
在 Host 端和 Slave 端互相知道 ip 地址后,就可以事先局域网通信了。
局域网通信一般都是通过 TCP 或 UDP 实现。
功能点 | TCP | UDP |
---|---|---|
可靠性 | 数据不丢失、无差错、不重复、按序到达 | 可能会丢包或者顺序错乱 |
效率 | 支持一对一 | 支持一对一、一对多、多对一、多对多 |
遇到的问题
《基于Android热点的局域网UDP广播,部分手机收不到UDP报文的问题》: https://blog.csdn.net/qq_27331979/article/details/50379683
UDP报文的发送和接收
Slave 端:
1 | class SearchRespThread : Thread() { |
Host 端:
1 | class DeviceSearcher { |
Socket 通信
Client 端:
1 | fun connect() { |
Server 端:
1 | public class SocketServer { |