Also known as: rtl_tcp
rtl_tcp is a small server that streams raw IQ samples from an RTL-SDR over a TCP connection, letting the dongle be used from another machine on the network.1 It is part of the Osmocom rtl-sdr toolset and is the simplest, oldest way to put physical distance between the radio and the software decoding it.
How it works
You launch rtl_tcp -a <address> -p <port> on the host that has the dongle. It opens the
RTL-SDR, sets a default centre frequency and sample rate, and
listens for a TCP client. When a client connects, rtl_tcp reads 8-bit unsigned I and Q bytes
straight off the RTL2832U and pushes them down the socket as a continuous stream — no
compression, no framing beyond the raw byte pairs. In the reverse direction the client sends
short command messages (a one-byte command plus a 32-bit value) to retune, change the
sample rate, or adjust gain, so the remote radio remains fully controllable. The wire format
is deliberately trivial, which is why almost every SDR application — including
GQRX, SDR#, and GNU Radio via gr-osmosdr —
speaks it.
Two consequences follow from streaming raw 8-bit IQ. First, the bandwidth is fixed by the sample rate: 2.4 MS/s of complex 8-bit samples is about 38 Mbit/s on the wire, so a fast LAN is fine but a constrained link is not. Second, there is no buffering intelligence — a network hiccup shows up as dropped samples, which a decoder sees as a momentary loss of lock. For this reason rtl_tcp is at its best over wired Ethernet or solid Wi-Fi on the same network segment.
Variants and alternatives
- rtl_tcp — RTL-SDR only, tiny and universal; the default when the radio is a dongle.
- SoapyRemote — the general-purpose successor: works for any SoapySDR-supported radio (HackRF, Airspy, SDRplay), not just RTL, and exposes the full device API rather than rtl_tcp’s fixed command set.
- spyserver — Airspy’s optimised network protocol, which can send a decimated slice rather than the whole band to save bandwidth.
- Vendor tools such as rtl_sdr (file capture) and rtl_fm (built-in FM demod) share the same library but run locally rather than over the network.
In practice
The classic deployment runs rtl_tcp on a Raspberry Pi mounted right at the antenna, keeping the coax run short and its loss low, while the CPU-heavy decoding runs on a desktop or server elsewhere in the building. This is often a better signal path than a long feedline to a centrally located radio, because feedline loss ahead of the SDR is unrecoverable whereas a short digital link after it is essentially lossless.
Relevance to SDR
rtl_tcp is a cornerstone of remote and headless SDR setups and one of the first tools most RTL-SDR users encounter. GopherTrunk can attach to an rtl_tcp (or SoapyRemote) source, treating a remote dongle like a local one — so the antenna, LNA, and dongle can live at the mast while GopherTrunk decodes the trunking traffic on a machine with the horsepower to run its DSP chain.
Sources
-
rtl-sdr (osmocom) — the Osmocom rtl-sdr project wiki, home of rtl_tcp and the RTL-SDR driver tools. ↩