Its been a few years since i've coded any network applications so I was hoping for some suggestions on the best approach.
I have written two programs which i now need to have them communicate with one another. They are both running on a LAN (over VPN) with static IP addresses.

I have a central program which will act as a server and receive incoming data from the clients. However, i also need to have the server distribute data back to the clients from time to time.

I am currently heading toward having both the server and client implement a TCPListener so that either end can establish the connection and send data; is this the best approach or is there a better two way architecture i can implement?

I guess your client / server model makes sense to me, as long as you can both receive and send data. the only advice i can give to you is to use events on one part then subscribe to them on the other, so you can easily monitor incoming and outgoing messages. also implements a simple thread that can be called regularly to check for any new events / data.

There isn't a perfect implementation i can give to you now except advice you do use certain approaches because i have personally used them.

If anything is not clear please ask