是否可以在同一台计算机上让两个应用程序直接通过 USB 相互通信(无电缆,无关联设备)?容易/难吗?你们会推荐什么API?
是的,我发布了一个类似的帖子,但它专门要求我找到一个 JAVA/USB 实现,但我需要 Windows 支持。所以现在我正在寻找任何 USB API - 它不必在 java 中工作。我总是可以只使用 JNI/JNative 来使用本机代码/库。
我在互联网上没有发现很多人做过同样的事情。
USB“总线”是电线。USB 不适用于进程间甚至点对点通信。它仅用于主机和外围设备之间通过主机发起任何/所有流量的电缆进行通信。您不能(通常)将 2 个主机连接在一起,也不能将两个设备连接在一起,或者在主机/设备之间进行任何类型的对称通信。
如果您只想在同一台机器上的两个进程之间进行进程间通信,那么 USB 不是可行的方法。这是完全没有意义的。如果要在两台不同机器上的两个进程之间进行进程间通信,则应使用 TCP/IP。
如果您要开发 USB 设备并想在任何原型硬件准备好之前开发主机和设备软件,而您真正想要的是一些开发或模拟环境,您可以在同一台机器上完成这些,将它们连接起来,并对其进行测试,那是完全不同的事情。
如果您只是希望允许两个进程进行通信,则可以使用 Unix 或域套接字。我想不出在本地通过 USB 进行进程间通信会成为优势的情况。Java 对此有很好的支持。
没有电缆和/或没有设备
因此,您当时所问的问题是不可能的(甚至没有任何意义),这就像问两个应用程序如何在没有连接的情况下通过串行端口进行通信..
也许您可以尝试找出实际的最终目标是什么,如果它只是进程间通信,那么有很多不同的方法可以给猫换皮……(com、wcf、内存映射文件等)
通过 USB 进行的通信必然涉及电气连接和上拉电阻器以及在特定时间出现在特定线路上的特定电压。如果没有实际的电缆,这些都很难模拟。
Jan Axelson 的 USB Central是开始了解 USB 通信的好地方。
我想通过大量内核工作,您可能会得到类似的工作。现有产品可以转usb其他网络。所以我猜它模拟了usb主机控制器或类似的东西。如果您可以模拟主机控制器,则可以模拟连接到该控制器的实际设备。并让用户态应用程序来控制这个设备。
但我估计它对于经验丰富的内核程序员来说是一个至少 6 MM 的项目,并且对 USB 协议有深入的了解。
主要问题是为什么?我找不到这个用例的任何逻辑原因(并不意味着它不存在)。