Laden...

TCPServer -> Thread Zugriff auf ListView

Erstellt von vitafit vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.968 Views
Thema geschlossen
vitafit Themenstarter:in
23 Beiträge seit 2011
vor 12 Jahren
TCPServer -> Thread Zugriff auf ListView

Guten Abend alle zusammen,

nach etwas anfänglichen Schwierigkeiten ist es mir nun endlich gelungen einen Multithreaded-Server aufzusetzen und ich bin begeistert wie gut das funktioniert 😃

Wo ich allerdings noch hänge ist folgende Thematik: Ich möchte meine verschiedenen Server-Instanzen gerne über eine GUI steuern können um diese zum Beispiel zu beenden. Jetzt laufen die Instanzen allerdings in einem Thread. Ich habe bereits grob von der Thematik mit dem Invoke gehört, wie es allerdings genau funktioniert, ist mir nicht ganz klar. Außerdem bin ich auch noch überfragt, wie ich dass mit der Zuordnung lösen soll. Falls nicht ganz klar ist was ich machen will: Sobald eine neue Instanz für einen Server erstellt wird, soll diese in einem Listview auftauchen über den ich anschließend zum Beispiel die Instanz bzw. den Thread beenden kann. Wie ich natürlich grundsätzlich mit einem Listview umgehe ist mir klar 😃

Hier mein aktueller Code:

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

namespace server_thread
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpListener serverSocket = new TcpListener(8888);
            TcpClient clientSocket = default(TcpClient);
            int counter = 0;

            serverSocket.Start();
            Console.WriteLine(" >> " + "Server gestartet");

            counter = 0;
            while (true)
            {
                counter += 1;
                clientSocket = serverSocket.AcceptTcpClient();
                Console.WriteLine(" >> " + "Client Nummer:" + Convert.ToString(counter) + " connected!");
                handleClinet client = new handleClinet();
                client.startClient(clientSocket, Convert.ToString(counter));
            }

            clientSocket.Close();
            serverSocket.Stop();
            Console.WriteLine(" >> " + "exit");
            Console.ReadLine();
        }
        
        public class handleClinet
        {
            TcpClient clientSocket;
            string clNo;

            public void startClient(TcpClient inClientSocket, string clineNo)
            {
                this.clientSocket = inClientSocket;
                this.clNo = clineNo;
                Thread.CurrentThread.Name = "server";  // Falls es irgendwie hilft bei der Wiedererkennung?
                Thread ctThread = new Thread(doChat);
                ctThread.Start();
            }

            private void do_something()
            {
                // Hier werden dann Nachrichten zum Server gesendet usw.
            }     
        } 
    }
}

Vielen Dank schon mal für eure Antworten!

Gelöschter Account
vor 12 Jahren
6.911 Beiträge seit 2009
vor 12 Jahren

Hallo vitafit,

zusätzlich zu Jacks Antwort:

gerne über eine GUI steuern können um diese zum Beispiel zu beenden.

Setzt in der Server-Klasse einfach ein volatile bool isStoppingRequested oder ab .net 4.0 einen CancellationToken und wenn das gesetzt wird sollend die Threads sich beendet. Dazu müssen diese auch regelmäßig das prüfen.

Aber das sind zuviele Themen aufeinmal für einen Thread. Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.2. Das das "Hauptthema" wohl der Thread-Zugriff auf Controls ist und dazu im oberen Link alles gesagt wurde verschiebe ich das Thema nach WinForms und schließe es. Für die andren Themen die hier angerissen wurde kannst du aber gerne ein neues Thema (unter Beachtung der Regeln 😃) erstellen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

Thema geschlossen