Wie behebe ich den Fehler "Normalerweise ist nur eine Verwendung jeder Socket-Adresse (Protokoll / Netzwerkadresse / Port) zulässig"?

Ich habe viel gegoogelt, aber mit meinen Problemen nicht viel Glück gehabt. Ich bin neu in der Netzwerkprogrammierung und habe versucht, einen einfachen Server und Client für die Kommunikation einzurichten (siehe Online-Tutorial hier ->)http://tech.pro/tutorial/704/csharp-tutorial-simple-threaded-tcp-server)

Das Problem, das ich habe, ist, dass ich beim Versuch, den TcpListener auf dem Server zu starten, die Ausnahme "Normalerweise ist nur eine Verwendung jeder Socket-Adresse (Protokoll / Netzwerkadresse / Port) zulässig" erhalte.

Ich habe versucht, meine Firewall zu deaktivieren, den zu verwendenden Port zu ändern, Variablen zu verschieben, aber ohne Erfolg (der Client funktioniert einwandfrei, aber er kann den Server offensichtlich nicht finden, weil ich ihn nicht starten kann).

Ich habe Lösungen gesehen, die die Verwendung von Socket.Poll () beschreiben, aber da ich nur das TcpListener-Objekt verwende, habe ich keine Ahnung, wie ich die Poll-Funktion verwenden soll.

Mein Code:

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));
        }
    }
}
}

In meiner Hauptmethode:

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();
    }
}
}

Jede Hilfe wird sehr geschätzt!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage