2009-05-23 5 views
1

Die Cross-Plattform-Entwicklungsumgebung Ich benutze habe in Funktion der eingebaute sollte, um anzuzeigen, ob ein TCP-Port zur Verfügung. Die Funktion funktioniert jedoch unter Vista nicht und gibt immer "verfügbar" zurück.Bestimmen Sie, ob ein TCP/IP-Port bereits unter Windows verwendet wird.

Gibt es eine einfache Art und Weise, wie eine DLL-Funktion, kann ich verwenden, um die korrekte Darstellung dieser Informationen zu bestimmen, ohne .Net zu benötigen? mit den üblichen Funktionen Winsock

+0

Welche Plattform verwenden Sie? – BobbyShaftoe

+0

Welche Entwicklungsumgebung? Und welche Funktion? –

+0

RealBasic 2009R2.1 eingebaute TCPSocket.Listen, die ein Ereignis "Error" mit lasterrorcode = 105 im "in use" -Fall auslösen soll. Es tut dies unter Mac OS X und Linux. –

Antwort

2

Sie können zu binden versuchen und auf dem Hafen zu hören. Wenn noch etwas am selben Port abgehört wird, erhalten Sie einen Fehler (WSAEADDRINUSE von bind()).

+0

Möglicherweise müssen Sie alle Netzwerkschnittstellen aufzählen und an sie binden. Ich weiß nichts über Windows, aber Linux erlaubt es sicherlich mehreren Anwendungen, auf demselben Port zu binden und zu hören, sofern sie unterschiedliche lokale IP-Adressen verwenden. – Tom

+0

@Tom: Ich nehme an, es hängt davon ab, ob das Ziel ist, herauszufinden, ob etwas anderes einen bestimmten Port verwendet oder ob Ihre Anwendung auf einem bestimmten Port zuhören kann. Meine Lösung würde für die letzte Frage funktionieren. –

0

Um zu vermeiden, in dem Nachspiel Abhängigkeiten oder Windows-spezifischen Code bringen Sie einfach könnten versuchen, den Anschluss zu verwenden und Probleme (wie das Abfangen von Firewall-Software) zu fangen.

0

einfach Win32 Nw api verwenden, um die TCP-Ports aufzuzählen.