Bağlantı noktası olup olmadığını belirlemek için C# kullanarak bir yol var mı? Daha önce kullanmış olduğum bir bağlantı noktasını kullanarak bir WCF ServiceHost örneğini başlatmadan önce kontrol etmek istiyorum :-)Bağlantı noktasının kullanımda olup olmadığını belirleme?
cevap
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
- 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.
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;
}