Surprisingly, with .NET this is easier to achieve good results then ever before. It's not clear if you need it Web-based or custom (which is way easier). You can still use HTTP protocol in order to go through firewalls.
Well, most important common mistake to avoid: don't create a thread per the client; they all can be served by just two threads: one listening to new connection, another busy with exchange with the available list of users (connected remote sockets).
You can have a rough idea if you look at the skeleton design I described in my past solution:
Multple clients from same port Number[
^].
Here you can find my overview of the levels of networking you can choose from:
how i can send byte[] to other pc[
^],
Communication b/w two Windows applications on LAN.[
^].
However, I think for your application the level of
TcpClient/TcpListener
would be the most suitable. I recommend you do some of your own research though.
It is highly simplified compared to what you want to do, so your project will take considerable effort. Still, I'm sure it is quite feasible for an experience developer solving such problem for the first time.
Good luck,
—SA