之前没怎么接触过这方面知识,最近有个需求需要实现这方面功能。于是上网查找资料,写了个小程序,实现了iPhone端和windows端的互联通信,原理基本上是这样的:windows端运行一个叫做usbmuxd的多路复用守护进程,该进程的作用是建立本地端口和远程端口的转发,实现usb到tcp的转换服务。window端通过本地127.0.0.1:27015连接到usb,然后指定和iPhone进行通信的端口(例如2345)。同样,iPhone端也指定对应连接地址127.0.0.1:2345。根据相关usb协议,客户端将请求包发送到usbmuxd进程,通过usbmuxd转发到对方设备,实现tcp连接。实现过程如下:
1、安装服务
windows端首先要安装苹果公司提供的相关服务,才能实现通信功能。服务名称为:AppleApplicationSupport和AppleMobileDeviceSupport
RESULT_OK = 0,
RESULT_BADCOMMAND = 1,
RESULT_BADDEV = 2,
RESULT_CONNREFUSED = 3,
//??
//??
RESULT_BADVERSION = 6,
};
enum usbmuxd_msgtype{
MESSAGE_RESULT = 1,
MESSAGE_CONNECT = 2,
MESSAGE_LISTEN = 3,
MESSAGE_DEVICE_ADD = 4,
MESSAGE_DEVICE_REMOVE = 5,
//??
//??
MESSAGE_PLIST = 8,
};
enum usbmuxd_header{
uint32_t length; // length of message, including header
uint32_t version; // protocol version
uint32_t message; // message type
uint32_t tag; // responses to this query will echo back
};
3、运行程序
windows端和iPhone分别运行客户端程序,指定ip地址和端口,就可以进行通信了
4、本人参考代码
window端:https://github.com/Polyfun/libimobiledevice-windows
iPhone端:https://github.com/rsms/peertalk