遥控器.png
原理
如果没有遥控器,APP和硬件直接通信,这个很简单。APP做为客户端,硬件做为服务端,硬件提供一个访问的IP地址,然后在提供几个服务的端口,直接使用CocoaAsyncSocket库,建立socket通信就OK。
但是现在中间加了一个遥控器就麻烦了,APP与硬件之间的所有通信都需要遥控器转发才能完成。
- APP初始化1个serverSocket,一个监听端口7088
- 遥控器连接上USB线之后,主动连接该端口,建立TCP连接,APP和遥控器之间的通信完全走该通道
TCP通信
遥控器上使用的usb工具,只能实现从遥控器到手机的tcp连接,不能手机主动建立连接。因此只能让遥控器做客户端,让手机APP做服务端,APP监听一个固定的端口,在USB连接成功之后,由遥控器主动去连接APP。
HTTP通信
APP初始化1个serverSocket,监听端口7091
-
APP发送HTTP请求全部发送到APP监听的7091端口这个本地服务器
http://127.0.0.1:7091/internal/thumbnails/video/1_thumb.jpg
7091serversocket收到数据后,在data前面加8个字节的头,头里包括80端口,并且保存客户端socket
把data交给7088的serversocket,由7088的的serversocket发送给遥控器
遥控器收到硬件的下行后,转发给7088的serversocket,从头数据中的type=0,判断出该数据是http数据
把数据发送给之前保存的客户端socket,客户端socket读取数据,传送给Http
收到遥控器指令后,销毁客户端socket