hoi,
in einem thread wird tcpListener.AcceptClient() aufgerufen, diese methode wartet nun auf einen client, aber wie kann ich dieses warten auf einen client abbrechen?
ich würde gerne per software eine gewisse zeit die "türen" aufmachen und dann wieder schließen - so ähnlich wie bei bluetooth - man ist nur für gewisse zeit sichtbar sozusagen.
hier mal meine terminal classe
in einem thread wird tcpListener.AcceptClient() aufgerufen, diese methode wartet nun auf einen client, aber wie kann ich dieses warten auf einen client abbrechen?
ich würde gerne per software eine gewisse zeit die "türen" aufmachen und dann wieder schließen - so ähnlich wie bei bluetooth - man ist nur für gewisse zeit sichtbar sozusagen.
hier mal meine terminal classe
C#-Quellcode
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Net;
- using System.Net.Sockets;
- using System.Threading;
- namespace Terminal
- {
- class Terminal
- {
- private TcpListener tcpListener;
- private Thread listenThread;
- private List<TcpClient> clientList;
- public Terminal()
- {
- this.clientList = new List<TcpClient>();
- this.tcpListener = new TcpListener(IPAddress.Any, 975);
- this.listenThread = new Thread(new ThreadStart(listenForClients));
- this.listenThread.Start();
- }
- public void startListening() {
- }
- public void stopListening()
- {
- }
- private void listenForClients()
- {
- // TCP Server starten
- this.tcpListener.Start();
- while (true)
- {
- TcpClient client = this.tcpListener.AcceptTcpClient();
- this.clientList.Add(client);
- Thread clientThread = new Thread(new ParameterizedThreadStart(handleClientCommunication));
- clientThread.Start(client);
- }
- }
- private void handleClientCommunication(object client)
- {
- TcpClient tcpClient = (TcpClient)client;
- NetworkStream clientStream = tcpClient.GetStream();
- byte[] message = new byte[4096];
- int bytesRead;
- while (true)
- {
- bytesRead = 0;
- try
- {
- bytesRead = clientStream.Read(message, 0, 4096);
- }
- catch
- {
- // socket error
- break;
- }
- if (bytesRead == 0)
- {
- // Client hat die Verbindung getrennt
- break;
- }
- // Nachricht vom Client empfangen
- ASCIIEncoding encoder = new ASCIIEncoding();
- string clientMessage = encoder.GetString(message, 0, bytesRead);
- }
- tcpClient.Close();
- }
- }
- }