You can look at the subnet for your machine and try to connect to the port in question. This saves you needing to know the specific address range the DHCP will give out.
You don't need to determine if the host is reachable because you would still have to attempt to connect to the port. If you connect to 255 addresses using a thread pool it will take a few seconds.
Instead of using TCP you could use UDP. UDP can send a broad cast to a whole subnet or multi-cast across networks with a single packet. This would allow you to send a request to any number of machines to find out if they have a service available.