When you have a connection established to a remote host, there is a stream of data which you can send information to them, and likewise receive from them, on.
You only have to accept the TcpClient once, after that, you're free to send to and receive from it as you please. In most server apps that I've created, I keep a collection of all of the TcpClients, and add them to it as they come. (when you accept) Then, I usually assign a thread to each of them to listen for the actual data coming from them, receive it, and finally handle it.
To show the similarities between server and client, when the client does Connect(), the server's Pending() changes to true, and the server can then accept the connection in the form on a TcpClient or Socket. After that, any data sent from that client to the server will end up at it's network stream, and can be accessed from client.GetStream().Read().
Also, I rarely use timers in .Net. Threads ftw.