2009-03-24 31 views

答えて

6

ポートが使用可能かどうかは判断できません。あなただけの、あなたがバインドされ、特定のソケットを持つと聞いてポートを制御していない限り、ポートが過去

にいくつかの時点で入手できたことをポート

  • の制御を持っている

    1. を決定することができますポート上では、別のプロセスが来てポートを制御することが可能です。

      ポートが利用可能かどうかを知る唯一の信頼できる方法は、それをリッスンすることです。成功すれば、ポートは使用可能であり、制御権を持っています。さもなければ、を越えて潜在的に現在ののある時点で、そのポートは別のエンティティによって制御されていたことがわかります。

  • 1

    In C#, how to check if a TCP port is available?については、オリジナルのポスターではクライアントやサーバーについて話しているのかどうか分からないと思うので、接続したいクライアントやポートで受信したいサーバーについての回答もあります。

    JaredParの回答は正しいです(これ以上!)が、時には不便かもしれません。

    あなたは、他のサーバがあなただけにチェック(または不定期の故障のために気にしない)ポートをつかんされていないことを合理的に確実である場合、あなたは(https://stackoverflow.com/a/570461/586754に似て、http://www.codeproject.com/Tips/268108/Find-the-open-port-on-a-machine-using-Csharp?msg=4176410#xx4176410xxから)試すことができます。

    public static int GetOpenPort(int startPort = 2555) 
    { 
        int portStartIndex = startPort; 
        int count = 99; 
        IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties(); 
        IPEndPoint[] tcpEndPoints = properties.GetActiveTcpListeners(); 
    
        List<int> usedPorts = tcpEndPoints.Select(p => p.Port).ToList<int>(); 
        int unusedPort = 0; 
    
        unusedPort = Enumerable.Range(portStartIndex, 99).Where(port => !usedPorts.Contains(port)).FirstOrDefault(); 
        return unusedPort; 
    } 
    
    関連する問題