QFT is a small application for Quick (and really reliable) Peer-To-Peer UDP file transfer.
...look at the "Releases" section on the sidebar. You should see a link titled vX.Y.Z. Click on
that, and then choose the right file for your OS: qft for Linux, qft-mac for Mac, and qft.exe
for Windows. Download this file, make it executable in case of Linux or Mac, and then follow your
friend's instructions on how to receive the file they wanted to send you.
qft sender <helper> <shared-phrase> <filename>.qft receiver <helper> <shared-phrase> <filename>.OR
- On both PCs, enter qft gui.
- Select mode
- Select file to send and file to save to
- Update the shared phrases and bitrate to match
- Click start
qft helper <bind-port>
qft sender <helper-address>:<helper-port> <phrase> <filename> [send-delay] [bitrate] [skip]
qft receiver <helper-address>:<helper-port> <phrase> <filename> [bitrate] [skip]
Helpers are NOT relays for data, they are only used to ESTABLISH the connection.
Helpers are there to help with holepunching. - P1 connects* to helper - P1 sends the phrase to the helper - P1 waits for a response - Some time passes - P2 connects* to the same helper - P2 sends the phrase to the helper - P2 gets P1's public IP and port - P1 gets P2's public IP and port - P1 and P2 disconnect* from the helper - P1 and P2 start a loop (slightly simplified): - fire a packet at eachother multiple times - try to receive as many packets from the other one - if none are received, loop again - if one is received, exit the loop - Connection between P1 and P2 is established.
*UDP is a connection-less protocol, there are no handshakes. The word "connection" is used here as an indicator that data will be exchanged between the "connected" parties. The word "disconnect" is used here as an indicator that no more data will be exchanged between the "previously connected" parties.
QFT_STREAM environmental variable.(shell) with your shell name,
usually bash or zsh):echo 'alias qftr="qft receiver tudbut.de:4277"' >> ~/.(shell)rc
echo 'alias qfts="qft sender tudbut.de:4277"' >> ~/.(shell)rc
source ~/.(shell)rc
You most likely won't need this unless the transfer completely died due to a VERY long pause or a computer restart, but if you do:
Stop qft on both ends and start it again with the [skip] parameter in place (if you didn't specify a bitrate before, the default is 256). It will skip those bytes and continue where you specified.
Connecting... but doesn't connectOne of your ends didn't correctly connect to the helper. Stop the transfer on both ends and try again.
Many people have mentioned how this is like croc. It isn't, because croc uses a relay that all your data is sent through. This is a bottleneck and also means that the relay admins are responsible for the content that is sent. The relay also buffers a lot of data, meaning its RAM might fill up if the sender's connection is much faster than the receiver's. Croc being tagged "peer-to-peer" is misleading at best because it rarely uses the P2P capabilities (it requires a port-forward to do P2P, which is rarely done). Read the previous section about P2P myths if you think Croc is always peer-to-peer.

As explained above, it is used to establish the connection between the two partners.
Your router uses a thing called Network Address Translation. It is required because otherwise, there would be way too many IP addresses in use and the internet would cease to work during busy times. This NAT is also a problem however, because it is a layer between your PC and the open internet. When there is a new incoming connection, the NAT won't know which PC in your LAN to forward the connection to, so the connection is simply rejected. Any Peer-to-Peer software therefore needs a helper server (also called "STUN" server) which both peers will ask for the other's IP address and port. Both peers can then send a bunch of outgoing connections to eachother. If everything goes well, both peers have sent an outgoing with the right timing, causing both NATs to think they are outgoing connections, when actually, they are a sort of combination of incoming and outgoing ones.
TL;DR: P2P networking is impossible without a helper server, because of Routers. Port-forwarding would be required otherwise, which can be hard to set up.
Read the 2nd bullet point in the Tips 'n Tricks section.