se in futuro ci devono essere + client ti consigli un'architettura multithread formata così:
Thread principale: accetta le connessioni e crea le istanze di una classe (Client)
Threads secondari: Saranno i thrads che fara partire il costruttore della classe Client, ovviamente nel metodo del Thread usi un socket.Poll per bloccare il thread fino a quando non ci sono dati in arrivo.
l'accettazione dei socket avviene in un ciclo while infinito, volendo invece del true nel While ci puoi mettere una tua condizione.codice:public class Principale { private TcpListener listener; //metodo che accetta le connessioni e genera i clients public Principale() { this.listener = new TcpListener(IPAddress.Any, porta); this.listener.Start(); while (true) { Socket socketForClient = this.listener.AcceptSocket(); //resta bloccato fino a quando non si connette un client e ritorna il socket di quel client new Client(socketForClient); } } }
Non ci resta che far partire il thread del Client:
codice:public class Client { private Socket socket; private Thread threadClient //metodo che lancia il Thread public Client(Socket socket) { this.socket = socket; this.threadClient = new Thread(new ThreadStart(this.leggiDati)); this.threadClient.IsBackground = true; this.threadClient.Start(); } public void leggiDati(){ while(this.socket.Connected){ byte[] buf = new byte[1024]; if (this.socket.Poll(-1, SelectMode.SelectRead)) { this.socket.Receive(buf)//legge i dati che sono arrivati e li inserisce nel buffer String strRicevuta = Encoding.UTF8.GetString(buf);//converte i byte ricevuti in una stringa /*operazioni da svolgere*/ }else{ break; } } } }
+ o - lo farei così, devi gestire le eccezioni, visto che sono risorse non gestite.

Rispondi quotando