Currently I have started with my college project - Network monitoring, which may include features like keylogging, application blocking, h/w restrictions, catching snapshots, file operations surveillance, etc. (i mean as many as i would be able to add.)
The platform for this project is C#.NET which is new to me. I have been learning it since past 2-3 days.

I am currently facing a bit weird (atleast to me) kind of situation :
In my project, the interface that an administrator would be using, is actually the client interface, i.e., the server PC would contain the client part of the project.
On the other hand, the server part would be installed in all the PCs(clients) which the administrator would like to monitor.
This is a kind of MULTIPLE SERVERS SINGLE CLIENT situation (atleast i assume so.)

I am stuck in deciding whether i should use synchronous or asynchronous mode of socket programming.According to me, mostly the kind of operations i would be handling would mainly be a single server-single client type : the client interface would deal with any one server at a time. (correction to my assumption are welcome.) So i think synchronous programming would suffice.

Next doubt (mainly addressed to C# programmers) is whether i should use TcpClient class or directly the "raw" Socket class for programming. I spent several hours trying to solve this dilemma, but couldnt get any solution. TcpClient is easier to use; but i may need to use the functionalities that Socket class provides over TcpClient.

Any suggestions (along with explanations) are welcome.

Also, would i have any need for multithreading? I think i wont require it because basically what i am dealing with would be single server-single client (a server on a node would handle the only client).