1. They aren't actually on the same network
This is the most common cause by a long way. A guest network is a different network even though it comes from the same router. So is a second Wi-Fi name, and so is a phone that quietly dropped back to mobile data when the signal dipped.
Check the network name on both devices and make sure they match exactly, and that the phone is really on Wi-Fi rather than showing a mobile signal.
2. Local network permission is off on iOS
Since iOS 14, an app has to ask before it can contact other devices on your local network, and the prompt only appears once. Tap past it and the app simply never finds anything, with no error explaining why.
You can turn it back on in Settings, in the app's own entry, under Local Network.
3. A VPN is running
A VPN sends your traffic through a tunnel to somewhere else. Depending on how it's set up, that can include traffic meant for your own network, so the device stops seeing its neighbours.
Disconnect the VPN while you transfer. This applies to a VPN at either end, and to privacy features in some browsers and security suites that work the same way.
4. A firewall is blocking the app
Desktop firewalls ask the first time an app wants to accept connections, and it's easy to dismiss that prompt and forget. On Windows the app also has to be allowed on the network profile you're actually using.
FileFly uses port 23013 both to find devices and to send files, so that's the port to allow.
5. Windows thinks the network is public
Windows applies much stricter rules to networks marked Public, including blocking device discovery. A home network sometimes gets classified this way, especially after a router change.
Set the connection to Private in network settings.
6. The router keeps its devices apart
Some routers stop connected devices talking to each other at all. The setting is usually called AP isolation or client isolation. It's on by default for guest networks, and occasionally for the main one too.
You'll find it in the router's wireless settings, and it needs to be off for any device-to-device transfer to work.
7. Different subnets or VLANs
Discovery relies on messages sent to every device on the local subnet, and those messages don't cross subnet boundaries. Mesh systems, extenders and business networks sometimes put devices on separate subnets.
Compare the IP addresses on both devices. If one is 192.168.1.x and the other is 192.168.2.x, that's your answer.
8. The app isn't open on both devices
Something has to be listening at both ends. A device with the app closed, or backgrounded long enough for the system to suspend it, won't show up.
Bring both to the foreground and give them a few seconds.