Another option would be to use WSE to achieve this (or "Windows Communication
Foundation" previously known as Indigo). This really falls under the hood of
sockets and custom serialization however the benefits are three-fold.
1) You don't have to do anything in terms of handling sockets etc. You can
simply create a SoapListener on a designated IP port and host a SoapService
(or Service(s)) there. Each client would simply need some way to know where
to send their requests.
2) There is built-in support for security and other advanced features.
3) Support for SOAP messaging which requires almost no effort on your part
and is supported industry-wide so you can communicate with clients written in
different languages. This is handled by the .NET serialization engine and
means you don't need to worry about manual serialization/deserialization of
the messages. It also makes any move to centralise these communications via
ASP.NET web services simpler to implement.
Hope this is of some benefit to you.
Also, if this is something you're thinking about looking into, check out
Thinktecture's WSCF (Web Service Contract First) tool for .NET - I've used it
to define my service interfaces that I host using WSE and it works well and
is easy to manage. It also means that your service interface can be reused in
many ways which can open up other options to you.
Hope this is of some assistance,
-Eric