2009-03-24 14 views
7

कोई पोर्ट उपलब्ध है या नहीं, यह निर्धारित करने के लिए सी # का उपयोग कर कोई तरीका है? मैं पहले से उपयोग किए जाने वाले पोर्ट का उपयोग करके डब्लूसीएफ सर्विसहोस्ट इंस्टेंस शुरू करने से पहले जांचना चाहता हूं :-)निर्धारित करें कि पोर्ट उपयोग में है या नहीं?

उत्तर

6

आप यह निर्धारित नहीं कर सकते कि कोई पोर्ट उपलब्ध है या नहीं। आप केवल

  1. निर्धारित कर सकते हैं आप एक बंदरगाह
  2. एक बंदरगाह अतीत

में कुछ बिंदु पर उपलब्ध था के नियंत्रण है कि जब तक आप बंदरगाह पर नियंत्रण के लिए एक विशेष सॉकेट बाध्य होने और सुनकर बंदरगाह पर, एक और प्रक्रिया के साथ आने और बंदरगाह पर नियंत्रण रखना संभव है।

एक पोर्ट उपलब्ध है या नहीं, यह जानने का एकमात्र विश्वसनीय तरीका है कि इसे सुनने का प्रयास करें। यदि आप सफल होते हैं तो बंदरगाह उपलब्ध है और आपके पास नियंत्रण है। अन्यथा आप जानते हैं कि में और संभावित रूप से वर्तमान में बंदरगाह किसी अन्य इकाई द्वारा नियंत्रित किया गया था।

1

In C#, how to check if a TCP port is available? के लिए, मुझे लगता है कि मूल पोस्टर वास्तव में सुनिश्चित नहीं है कि वह क्लाइंट या सर्वर के बारे में बात कर रहा है, तो उत्तर या तो क्लाइंट को कनेक्ट करने के लिए या पोर्ट बंदरगाह पर सुनना चाहते हैं।

जेरेडपार का जवाब सही है (इस से अधिक!) हालांकि कभी-कभी असुविधाजनक हो सकता है।

आप यथोचित निश्चित है कि कोई अन्य सर्वर पोर्ट तुम सिर्फ जाँच हथियाने है (या कभी कभी असफलता के लिए परवाह नहीं है) कर रहे हैं, तो आप (, http://www.codeproject.com/Tips/268108/Find-the-open-port-on-a-machine-using-Csharp?msg=4176410#xx4176410xx से https://stackoverflow.com/a/570461/586754 के समान) की कोशिश कर सकते हैं:

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; 
} 
संबंधित मुद्दे