/// <summary> /// Haupt-Thread, wartet auf neue Client-Verbindungen /// </summary> private void MainListener() { // Alle Netzwerk-Schnittstellen abhören TcpListener listener = new TcpListener(ipAddress, serverListenPort); status.NewMessage("Listening on port " + serverListenPort + "..."); try { listener.Start(); // Solange Clients akzeptieren, bis das // angegebene Maximum erreicht ist while (status.CurrentConnections <= maxServerConnections) { while (!listener.Pending()) { Thread.Sleep(sleepTime); } Socket newSocket = listener.AcceptSocket(); if (newSocket != null) { status.CurrentConnections++; // Mitteilung bzgl. neuer Clientverbindung status.NewMessage("Neue Client-Verbindung (" + "IP: " + newSocket.RemoteEndPoint + ", " + "Port " + ((IPEndPoint)newSocket.LocalEndPoint).Port.ToString() + ")"); // Instanz der serverseitigen Verwaltungsklasse erzeugen IServerInterface x = (IServerInterface)Activator.CreateInstance(serverClass); x.SetConnectionData(newSocket); ServerInstance newConnection = new ServerInstance(newSocket, x); Clients.Add(newConnection); } } } catch (ThreadAbortException ex) { status.NewMessage("Server wird beendet.\r\n" + ex.Message); } catch (Exception ex) { throw new Exception("Fehler bei Verbindungserkennung", ex); } }
public void Dispose() { // Haupt-Thread beenden if (mainThread != null) { mainThread.Abort(); } // Client-Threads beenden if (Clients.Count > 0) { for (int cnt = Clients.Count - 1; cnt >= 0; cnt--) { ServerInstance srv = (ServerInstance)Clients[cnt]; srv.serverThread.Abort(); Clients.RemoveAt(cnt); } } // Event-Handler abmelden //status.messageEvents=null; }