148 Stimmen

Wie kann man in C# prüfen, ob ein TCP-Port verfügbar ist?

In C# zu verwenden, ein TcpClient oder im Allgemeinen zu einem Socket zu verbinden, wie kann ich zuerst überprüfen, ob ein bestimmter Port auf meinem Rechner frei ist?

Mehr Informationen: Dies ist der von mir verwendete Code:

TcpClient c;
//I want to check here if port is free.
c = new TcpClient(ip, port);

1voto

ya23 Punkte 13912

Seien Sie sich bewusst, dass das Zeitfenster zwischen der Überprüfung und dem Moment, in dem Sie versuchen, eine Verbindung herzustellen, den Port in Anspruch nehmen kann - klassisch TOCTOU . Warum versuchen Sie nicht einfach, eine Verbindung herzustellen? Wenn dies fehlschlägt, wissen Sie, dass der Anschluss nicht verfügbar ist.

1voto

Martin.Martinsson Punkte 1473
    public static bool TestOpenPort(int Port)
    {
        var tcpListener = default(TcpListener);

        try
        {
            var ipAddress = Dns.GetHostEntry("localhost").AddressList[0];

            tcpListener = new TcpListener(ipAddress, Port);
            tcpListener.Start();

            return true;
        }
        catch (SocketException)
        {
        }
        finally
        {
            if (tcpListener != null)
                tcpListener.Stop();
        }

        return false;
    }

0voto

Yuriy Stanchev Punkte 1
test_connection("ip", port);

public void test_connection(String hostname, int portno) {
  IPAddress ipa = (IPAddress)Dns.GetHostAddresses(hostname)[0];
  try {
    System.Net.Sockets.Socket sock = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
   sock.Connect(ipa, portno);
   if (sock.Connected == true) {
     MessageBox.Show("Port is in use");
   }

   sock.Close();
 }
 catch (System.Net.Sockets.SocketException ex) {
   if (ex.ErrorCode == 10060) {
     MessageBox.Show("No connection.");
   }
 }
}

-2voto

shakram02 Punkte 8742

Versuchen Sie dies. In meinem Fall war die Portnummer für das erstellte Objekt nicht verfügbar, also habe ich mir folgendes ausgedacht

IPEndPoint endPoint;
int port = 1;
while (true)
{
    try
    {
        endPoint = new IPEndPoint(IPAddress.Any, port);
        break;
    }
    catch (SocketException)
    {
         port++;
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X