如何通过USB在两台PC之间进行通信?我想要一个程序通过USB端口将数字发送到另一台PC上,另一台程序会显示这些数字。我觉得这是不可能的,因为PC应该是主机而不是设备,但USB真的有限吗?我实际上讨厌USB不像只有输入缓冲区和输出缓冲区的COM端口。您轻松发送和接收。我查看了libusb,我可以使用它,但我找不到一种方法来使一台PC成为一台设备。那么它甚至可能吗?
答案 0 :(得分:5)
我找不到让一台PC成为设备的方法。那么它甚至可能吗?
不,这在PC上是不可能的。 USB始终通信主机 - >设备,而PC始终是主机。 您可以购买一条特殊的USB2USB电缆,它的中间有一个芯片,可以作为两端的设备进行通信。
但我会使用LAN线缆。我认识的每台PC最近都带有以太网。 TCP / IP不是很难使用。
答案 1 :(得分:5)
如果您非常喜欢串口,那么您应该为每台计算机获得一个USB-to-serial adapter,然后将它们连接在一起。这些设备在您的计算机上创建一个虚拟COM端口,您可以像使用普通COM端口一样使用它。
答案 2 :(得分:3)
您需要支持API或SDK的USB数据传输电缆(也称为USB数据链接电缆),然后使用以下代码。通信速度比使用USB上的WinSock(TCP / IP)或USB上的串行端口快得多。 USB2.0通讯速率为480Mbps,有效数据通信速度大于100Mbps,可以隔离病毒和网络攻击。
void CU2uDlg::OnOK()
{
BYTE buf[65530];
LPU2URET pU2uRet;
BOOL bRet;
int ret;
CString msgstr;
ret = u2u_open();
if (ret == -1){
AfxMessageBox("Open U2U device Success.");
}else{
msgstr.Format("Open U2U device fail,return:%d", ret);
AfxMessageBox(msgstr);
return;
}
//send data
bRet = u2u_SendData(buf, 65530, ret);
if(!bRet)
{
msgstr.Format("Send data error,return:%d", ret);
AfxMessageBox(msgstr);
return;
}
//receive data
while (1){
bRet = u2u_RecvData(recvData, dataLen, ret);
if( !bRet )
{
msgstr.Format("Receive data error,return:%d", ret);
AfxMessageBox(msgstr);
u2u_close();
return;
}else{
break;
}
}
u2u_close();
}
请参阅: Reference1,Reference2
答案 3 :(得分:0)
我也一直在研究这个问题,并且在USB 3规范中发现允许主机到主机的通信。自USB 3规范首次发布以来,这一直是USB 3的功能。这个错误的神话仍然存在,即USB 3不允许这样做,因为USB 2.0不允许这样做,并且很可能是由于人们使用不合规范的电缆炸毁了人们的计算机而造成的。它将使用兼容的电缆和正确的软件。我找不到自己的软件。我也不准备自己写软件。
兼容的USB主机到主机电缆的外观如何?两端都有USB-A连接器。 + 5v,D +和D-引脚将不会连接。高速数据线将被交叉。我假设如果至少一台计算机具有USB-C端口,则可以使用标准C到C电缆或标准C到A电缆。也许不是,主机到主机的连接也需要交叉电缆。我希望硬件足够聪明,可以交叉信号,因为它足够聪明,不会使电源短路。
有一个Microsoft文档,描述了如何使用这些主机承载电缆进行内核调试。那是我唯一能在两台计算机之间提供全带宽USB 3的东西。这演示了一些非常基本的主机来进行通讯。也许有人可以看一下现有的代码,以了解如何使这项工作更广泛地起作用。