2017-01-24 6 views
1

Je cherchais une solution sérieuse sur google et je reçois seulement des "solutions de Régisrty" genre de choses que je ne pense même pas reliées à mon problème.Une seule utilisation de chaque adresse de socket (protocole/adresse réseau/port) est normalement autorisée?

Pour une raison quelconque j'obtiens cette erreur, alors que je ne lance le TcpListner qu'une seule fois, et quand + si échoue j'arrête le serveur. Je ne comprends vraiment pas. Voici mon 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); 
      } 
     } 

J'apprécie vraiment votre aide!

+2

Le problème est un autre programme est déjà à l'écoute sur ce port ... – Gusman

+1

Vous pouvez essayer soit un autre port ou la liaison à une adresse IP locale spécifique adresse plutôt que chacun d'eux. –

+0

@DavidSchwartz comment puis-je savoir quels ports sont libres d'utiliser? – WeinForce

Répondre

4
  1. I ouvert CMD et typée dans: netstat -a
  2. Je pris un coup d'oeil dans la colonne Adresse locale.
  3. J'ai regardé la partie port.
  4. J'ai vu que le port de mon programme est déjà actif (en cours d'utilisation) dans un autre programme.
  5. J'ai changé mon port dans mon programme pour quelque chose d'autre.

    Ça a marché!

    Un grand merci à: @DavidSchwartz, @Gusman