Zu 1.
Ob ein Port "besetzt" ist oder nicht, kannst du mit einem ClientSocket testen. Wenn eine Verbindung zustande kommt, hängt ein Server an dem Port, falls nicht, hängt keiner dran.
Zu 2.
Es gibt 2^16 - 1 (65535) Ports pro Rechner. Aber die alle zu überprüfen, ist sehr rechenintensiv. Die ersten 1024 Ports solltest du aber nicht verwenden, diese sind nämlich für Standard-Server reserviert. Bei den 65535 gibts aber ne ganze Menge, die frei sind, also wirst du wohl nicht jeden einzelnen abfragen müssen