1. Traditional Server - Client architecture
For many years, to connect a USB over network, you’d have to install a Server-side app on all your machines with physically attached USB devices and share each specific device separately to make it remotely accessible. The Server app redirected USB traffic from a shared device to the client machine.
Then you’d have to install the Client-side app on the machines that needed to access USB devices. That Client app created a virtual USB device that, in real-time, exchanged data with the physical USB device so you could interact with it just as if it was directly plugged into the client machine.
The main downside of this approach is that Server and Client apps were not interchangeable. As they usually had very similar interface, using them on one machine was very confusing. The most typical example of this approach is USB over Network by FabulaTech.
Then you’d have to install the Client-side app on the machines that needed to access USB devices. That Client app created a virtual USB device that, in real-time, exchanged data with the physical USB device so you could interact with it just as if it was directly plugged into the client machine.
The main downside of this approach is that Server and Client apps were not interchangeable. As they usually had very similar interface, using them on one machine was very confusing. The most typical example of this approach is USB over Network by FabulaTech.