Normaal gesproken is slechts één gebruik van elk socketadres (protocol/netwerkadres/poort) toegestaan?

Ik ben op zoek geweest naar een serieuze oplossing op Google en ik krijg alleen ‘Regisrty solutions’-achtige dingen waarvan ik denk dat ze niet eens verband houden met mijn probleem.

Om de een of andere reden krijg ik deze fout, terwijl ik de TcpListner maar één keer start, en wanneer+als het niet lukt, stop ik de server.
Ik snap het echt niet.
Hier is mijn 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);
            }
        }

Ik zal je hulp erg op prijs stellen!


Antwoord 1, autoriteit 100%

  1. Ik opende CMD en typte: netstat -a
  2. Ik heb de kolom Lokaal adres bekeken.
  3. Ik heb het poortgedeelte bekeken.
  4. Ik zag dat de poort in mijn programma al actief is (in gebruik) in een ander programma.
  5. Ik heb mijn poort in mijn programma gewijzigd in iets anders.

    Het werkte!

    Big Dank aan: @Davidschwartz, @Gusman


Antwoord 2, Autoriteit 94%

  1. Open CMD
  2. Type Netstat -ano
  3. Lijst van proces met hun poorten wordt geopend
  4. Zoeken ‘Process-ID’ van de poort U kunt niet gebruiken (in mijn poort 11020)
  5. Open taakbeheer en stop dat proces
  6. Nu is uw poort klaar voor gebruik 🙂

Antwoord 3, Autoriteit 25%

optie 1

  1. Open de opdrachtprompt.
  2. Type netstat -ano | findstr ":80"– Waar “80” is het poortnummer waarnaar u op zoek bent.
  3. Kijk naar de laatste kolom in de resultaten – de PID.
  4. voor elke pid die u wilt doden, voert u taskkill /PID <PID> /Fin het venster Opdrachtprompt (waarbij <PID>is de PID die moet worden gedood).

optie 2

Als optie 1 hierboven niet werkt, probeer dan uw machine opnieuw op te starten.


Antwoord 4, Autoriteit 3%

Om het proces te vinden, is het eenvoudig met PowerShell:

$theCulpritPort="8001"
Get-NetTCPConnection -LocalPort $theCulpritPort `
| Select-Object -Property "OwningProcess", @{'Name' = 'ProcessName';'Expression'={(Get-Process -Id $_.OwningProcess).Name}} `
| Get-Unique

vooruitgang, als u het proces moet doden en vervolgens een stopproces op het einde laat pijpen:

$theCulpritPort="8001"
Get-NetTCPConnection -LocalPort $theCulpritPort -ErrorAction Ignore `
| Select-Object -Property  @{'Name' = 'ProcessName';'Expression'={(Get-Process -Id $_.OwningProcess).Name}} `
| Get-Unique `
| Stop-Process -Name {$_.ProcessName} -Force

Other episodes