gpt4 book ai didi

android - 在 `adb forward` 和 `usbmuxd` 的情况下,谁应该是 socket 服务器,谁应该是客户端

转载 作者:行者123 更新时间:2023-11-28 23:28:26 26 4
gpt4 key购买 nike

我正在尝试通过 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:<port1> tcp:<port2>通过转发桌面主机端口来执行类似的操作,但主机本质上是一个套接字客户端。据我了解,主机必须知道任意设备上的所有端口,并且设备必须确保这些端口是唯一的,这使得与多个设备的握手过程自动化变得困难。

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

还是我对整件事都错了?

最佳答案

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 上

关于android - 在 `adb forward` 和 `usbmuxd` 的情况下,谁应该是 socket 服务器,谁应该是客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57764534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com