2017-01-24 3 views
1

Ich habe nach einer ernsthaften Lösung auf Google gesucht und ich bekomme nur "Regisrty-Lösungen" Art von Sachen, die ich glaube nicht, beziehen sich sogar auf mein Problem.Normalerweise ist nur eine Verwendung jeder Socket-Adresse (Protokoll/Netzwerkadresse/Port) zulässig?

Aus irgendeinem Grund bekomme ich diesen Fehler, während ich den TcpListner nur einmal starte, und wenn + wenn fehlschlägt, stoppe ich den Server. Ich verstehe es wirklich nicht. Hier ist mein Code:

class Program 
    { 
     private static string ServerName = ""; 
     private static string UserName = ""; 
     private static string Password = ""; 
     private static string dbConnectionSring = ""; 
     private static X509Certificate adminCertificate; 
     private static byte[] readBuffer = new byte[4096]; 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Please grant SQL Server access to the Admin Server:\n"); 
      Console.Write("Server Name: "); 
      ServerName = Console.ReadLine(); 
      Console.Write("\nUser Name: "); 
      UserName = Console.ReadLine(); 
      Console.Write("\nPassword: "); 
      Password = PasswordMasker.Mask(Password); 
      dbConnectionSring = SQLServerAccess.CreateConnection(ServerName, UserName, Password); 
      adminCertificate = Certificate.GenerateOrImportCertificate("AdminCert.pfx", "randomPassword"); 
      try 
      { 
       Console.WriteLine("Initializing server on the WildCard address on port 443..."); 
       TcpListener listener = new TcpListener(IPAddress.Any, 443); 
       try 
       { 
        Console.WriteLine("Starting to listen at {0}: 443...", IPAddress.Any); 

        //the backlog is set to the maximum integer value, but the underlying network stack will reset this value to its internal maximum value 
        listener.Start(int.MaxValue); 
        Console.WriteLine("Listening... Waiting for a client to connect..."); 
        int ConnectionCount = 0; 

        while (true) 
        { 
         try 
         { 

          listener.BeginAcceptTcpClient(new AsyncCallback(AcceptCallback), listener); 
          ConnectionCount++; 
          Console.WriteLine(
           " Accepted connection #" + ConnectionCount.ToString()); 


         } 
         catch (SocketException err) 
         { 
          Console.WriteLine("Accept failed: {0}", err.Message); 
         } 
        } 
       } 
       catch (Exception ex) 
       { 
        Console.WriteLine("Listening failed to start."); 
        listener.Stop(); 

        Console.WriteLine(ex.Message); 
       } 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Initialiazing server Failed."); 
       Console.WriteLine(ex.Message); 
      } 
     } 

Ich werde schätzen wirklich Ihre Hilfe!

+2

Das Problem ist ein anderes Programm bereits auf diesem Port hört ... – Gusman

+1

Sie können entweder einen anderen Port oder die Bindung an einen bestimmten lokalen IP ausprobieren möchten Adresse statt alle von ihnen. –

+0

@DavidSchwartz Wie kann ich wissen, welche Ports frei sind? – WeinForce

Antwort

4
  1. Ich öffnete CMD und tippte: netstat -a
  2. ich einen Blick in die Spalte Lokale Adresse hat.
  3. Ich schaute auf den Port-Teil.
  4. Ich sah, dass der Port in meinem Programm bereits in einem anderen Programm (in Verwendung) aktiv ist.
  5. Ich habe meinen Port in meinem Programm zu etwas anderem geändert.

    Es funktionierte!

    Vielen Dank an: @DavidSchwartz, @Gusman

Verwandte Themen