Using the command line, you can use Socat to set up two bidirectional byte streams and move data between them. When you look at address types, you can see that the streams can be made up of a wide range of different types of data sinks and sources. Socat can be used for many different things because of this.