私が使用するクロスプラットフォームの開発環境には、TCPポートが使用可能かどうかを示す組み込み関数があります。ただし、Vistaでは機能が正しく動作せず、常に「使用可能」が返されます。WindowsでTCP/IPポートが既に使用されているかどうかを確認しますか?
dll関数などの簡単な方法がありますが、.NETを必要とせずにこの情報を正しく判別するために使用できますか?
私が使用するクロスプラットフォームの開発環境には、TCPポートが使用可能かどうかを示す組み込み関数があります。ただし、Vistaでは機能が正しく動作せず、常に「使用可能」が返されます。WindowsでTCP/IPポートが既に使用されているかどうかを確認しますか?
dll関数などの簡単な方法がありますが、.NETを必要とせずにこの情報を正しく判別するために使用できますか?
通常のWinsock機能を使用して、ポートにバインドしてリッスンを試みることができます。同じポートですでに何か他のものがリスンしている場合は、エラーが発生します(WSAEADDRINUSE
からbind()
)。
すべてのネットワークインターフェイスを介して列挙し、それらにバインドする必要があります。 Windowsについてはわかりませんが、Linuxでは、複数のアプリケーションが同じポートでバインドしてリッスンし、異なるローカルIPアドレスを使用するように指定できます。 – Tom
@トム:それは、何かが特定のポートを使用しているかどうか、またはアプリケーションが特定のポートでリッスンできるかどうかを調べることが目的であると考えます。私の解決策は、後者の質問のために働くだろう。 –
追加された依存関係やWindows固有のコードを持たないようにするには、単にポートを使用して、ファイアウォールソフトウェアによる傍受などの問題をキャッチします。
Win32 Nw apisを使用してTCPポートを列挙します。
あなたはどのプラットフォームを使用していますか? – BobbyShaftoe
どの開発環境ですか?そして、どの機能? –
RealBasic 2009R2.1はTCPSocket.Listenで構築されています。これは、 "使用中"のケースでlasterrorcode = 105の "Error"イベントを発生させることになっています。これはMac OS XとLinuxではこれを行います。 –