When it comes to peer2peer, you always need at least one PC who has port forwarding enabled. This means, that if you have a listener/server at pc1 and a client at pc2, you would need a port forwarding on pc1.
This is called HighID/LowID in general and is a symptom of the NAT firewall implemented in almost every router. Without at least one port forwarding, there is no way two PCs can connect. This is because the router wouldn’t know which local IP to map to an incoming TCP packet unless there is a forwarding.
As for what classes you can use: Take a look at System.Net.TcpClient
and System.Net.TcpListener
3
solved Need concept to develop p2p file sharing apps using c# 4.0