2009-03-24 28 views

cevap

6

Bir bağlantı noktasının kullanılabilir olup olmadığını belirleyemezsiniz. Yalnızca belirli bir soket bağlı olan ve dinleyerek size port kontrol sürece bir liman geçmiş

bir noktada kullanılabilir Bu bir port

  • kontrol edebiliyor O

    1. belirleyebilir limanda, başka bir işlemin gelip limanın kontrolünü ele geçirmesi mümkündür.

      Bir bağlantı noktasının müsait olup olmadığını bilmenin tek güvenilir yolu, onu dinlemeye çalışmaktır. Eğer başarılı olursanız liman kullanılabilir ve kontrolünüz var. Aksi halde, 'un'u geçtiği ve potansiyel olarak mevcut olan noktanın başka bir varlık tarafından kontrol edildiğini biliyorsunuzdur.

  • 1

    In C#, how to check if a TCP port is available?'a gelince, asıl posterin istemci veya sunucu hakkında konuştuğundan emin olmadığına inanıyorum, ayrıca yanıtlar istemciyi bağlanmak isteyen istemciyle ya da bir bağlantı noktasını dinlemek isteyen sunucuyla ilgili.

    JaredPar'ın cevabı doğrudur (bundan daha fazlası!) Bazen de rahatsız edici olabilir.

    başka hiçbir sunucu sadece kontrol noktasını kapma (veya ara sıra başarısızlığın umurumda değil) bu makul bazı iseniz, (https://stackoverflow.com/a/570461/586754 benzer http://www.codeproject.com/Tips/268108/Find-the-open-port-on-a-machine-using-Csharp?msg=4176410#xx4176410xx itibaren) deneyebilirsiniz:

    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; 
    } 
    
    İlgili konular