【问题标题】:Who should be a socket server and who should be a client in the case of `adb forward` and `usbmuxd`在 `adb forward` 和 `usbmuxd` 的情况下,谁应该是套接字服务器,谁应该是客户端
【发布时间】:2019-10-22 18:04:29
【问题描述】:

我正在尝试通过 USB 在台式计算机和许多移动设备之间创建服务器-客户端连接。

对我来说,在桌面端创建一个套接字服务器来侦听特定端口以进行连接,同时让多个移动设备连接到该端口是有意义的。但是,the info I found on usbmuxd 说移动设备应该是套接字服务器:

In practice it is possible to **create a socket server in a free port from an iOS** App and to connect to it from the host machine sending the following command via the /var/run/usbmuxd Unix socket (File Descriptor):

<?xml version=”1 .0" encoding=”UTF-8"?>
<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList1.0.dtd”>
<plist version=”1.0">
<dict>
<key>ClientVersionString</key>
<string>usbmuxd-423.206.4</string>
<key>DeviceID</key>
<integer>4</integer>
<key>MessageType</key>
<string>Connect</string>
<key>PortNumber</key>
<integer>My port</integer>  <--- The port number (with endian transform htonl)
<key>ProgName</key>
<string>usbmuxd</string>
</dict> 
</plist>

在 Android 中,adb forward tcp:&lt;port1&gt; tcp:&lt;port2&gt; 似乎通过转发桌面主机端口来做类似的事情,但主机本质上是一个套接字客户端。据我了解,主机必须知道任意设备上的所有端口,并且设备必须确保这些端口是唯一的,这使得与多个设备的握手过程难以自动化。

这是设计使然吗?难道就不能这样颠倒桌面端和移动端的服务器-客户端关系吗?

还是我错了?

【问题讨论】:

    标签: android ios sockets mobile


    【解决方案1】:

    adb forwardusbmuxd(通常通过 iproxy)都将您 PC 上的 TCP 端口转发到您的移动设备。这意味着您的 PC 是客户端,而您的移动设备充当 TCP 服务器。

    通常,您在移动设备上启动一个众所周知的应用程序,该应用程序总是公开相同的端口(例如,2000)。您可以通过adb forward tcp:3000 tcp:2000iproxy 3000 2000 连接到在您的设备上运行的应用程序。然后,您可以通过连接到 PC 上的端口 3000 连接到设备上的端口 2000。

    如果您有多个设备,您可以使用PC 上的不同端口,并将它们转发到设备上的同一端口。例如,您可以使用adb forward -s device_1 tcp:3001 tcp:2000adb forward -s tdevice_2 tcp:3002 tcp:2000。连接到 PC 上的端口 3001 最终会连接到设备 1 上的端口 2000,而 PC 上的端口 3002 将映射到端口 2000 在设备 2 上

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-30
      • 2011-12-06
      • 1970-01-01
      • 2016-04-25
      • 2014-03-08
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      相关资源
      最近更新 更多