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.


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);
             }
        }
}
l'accettazione dei socket avviene in un ciclo while infinito, volendo invece del true nel While ci puoi mettere una tua condizione.
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.