Jak naprawić błąd „Zwykle dozwolone jest tylko jedno użycie każdego adresu gniazda (protokołu / adresu / portu sieciowego”)?

Zrobiłem dużo gogli, ale nie miałem dużo szczęścia w moich sprawach. Jestem nowy w programowaniu sieci i próbuję się nauczyć, próbowałem skonfigurować prosty serwer i klienta, które komunikują się (zgodnie z tutorialem online tutaj ->http://tech.pro/tutorial/704/csharp-tutorial-simple-threaded-tcp-server)

Problem, który mam, polega na tym, że ciągle otrzymuję wyjątek „Zwykle dozwolone jest tylko jedno użycie każdego adresu gniazda (protokołu / adresu / portu sieciowego”) podczas próby uruchomienia TcpListener na serwerze.

Próbowałem wyłączyć moją zaporę ogniową, zmienić używany port, przesuwać zmienne, ale bezskutecznie (klient działa dobrze, ale oczywiście nie może znaleźć serwera, ponieważ nie mogę go uruchomić).

Widziałem rozwiązania opisujące użycie Socket.Poll (), ale ponieważ używam tylko obiektu TcpListener, nie mam pojęcia, jak korzystać z funkcji Poll.

Mój kod:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.Text;

namespace ServerTutorial {
class Server {
    private readonly Thread m_listenThread;

    public Server() {
        m_listenThread = new Thread(new ThreadStart(ListenForClients));
        m_listenThread.Start();
    }

    public void ListenForClients() {
        var listener = new TcpListener(IPAddress.Any, 3000);
        listener.Start();

        while (true) {
            //Blocks until a client has connected to the server
            TcpClient client = listener.AcceptTcpClient();

            //Send a message to the client
            var encoder = new ASCIIEncoding();
            NetworkStream clientStream = client.GetStream();
            byte[] buffer = encoder.GetBytes("Hello Client!");
            clientStream.Write(buffer, 0, buffer.Length);
            clientStream.Flush();

            //Create a thread to handle communication with the connected client
            var clientThread = new Thread(new ParameterizedThreadStart(HandleClient));
            clientThread.Start(client);
        }
    }

    private void HandleClient(object clientObj) { //Param thread start can only accept object types, hence the cast
        var client = (TcpClient) clientObj;
        NetworkStream clientStream = client.GetStream();

        var message = new byte[4096];

        while (true) {
            int bytesRead = 0;

            try {
                //Block until a client sends a message
                bytesRead = clientStream.Read(message, 0, 4096);
            } catch {
                //A socket error has occurred
                System.Diagnostics.Debug.WriteLine("A socket error has occured");
                break;
            }

            if (bytesRead == 0) {
                //The client has disconnected from the server
                System.Diagnostics.Debug.WriteLine("A client has disconnected from the server");
                client.Close();
                break;
            }

            //Message has been received
            var encoder = new ASCIIEncoding();
            System.Diagnostics.Debug.WriteLine(encoder.GetString(message, 0, bytesRead));
        }
    }
}
}

W mojej głównej metodzie:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ServerTutorial {
class Program {
    static void Main(string[] args) {
        var server = new Server();
        server.ListenForClients();
    }
}
}

Każda pomoc jest bardzo mile widziana!

questionAnswers(3)

yourAnswerToTheQuestion