web-dev-qa-db-ger.com

Normalerweise ist nur eine Verwendung jeder Socketadresse (Protokoll/Netzwerkadresse/Port) zulässig.

Ich habe nach einer ernstzunehmenden Lösung für Google gesucht und bekomme nur "Regisrty-Lösungen", die meiner Meinung nach nicht einmal mit meinem Problem zusammenhängen.

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 Ihre Hilfe wirklich schätzen!

4
WeinForce
  1. Ich öffnete CMD und tippte ein: netstat -a
  2. Ich habe mir die Spalte Lokale Adresse angesehen.
  3. Ich habe mir den Portteil angesehen.
  4. Ich habe gesehen, dass der Port in meinem Programm bereits in einem anderen Programm aktiv ist (verwendet wird).
  5. Ich habe meinen Port in meinem Programm auf etwas anderes geändert.

    Es funktionierte!

    Vielen Dank an: @DavidSchwartz, @Gusman

10
WeinForce
  1. Cmd öffnen
  2. Geben Sie netstat –ano ein 
  3. Die Liste der Prozesse mit ihren Ports wird geöffnet 
  4. Suchen Sie nach der Prozess-ID des Ports, den Sie nicht verwenden können (in meinem Fall Port 11020).
  5. Öffnen Sie den Task-Manager und stoppen Sie den Vorgang
  6. Jetzt ist Ihr Port einsatzbereit :) 
1
harpreet singh