Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Direct P2P connection

Tags:

c#

networking

p2p

This topic resembles this thread

I'm rather new to the topic of network programming, never having done anything but basic TCP/UDP on a single local machine. Now I'm developing an application that will need P2P network support. More specifically I will need the application to connnect and communicate across the internet preferably without the use of a server to do the matchmaking between the clients.

I'm aware and assuming that almost all users are behind a router which complicates the process since neither clients will be able to initialize a direct connection to the other.

I know UPnP is an option to allow port forwarding without having the users configure this manually, but as of now this is not an option. Is they any way to achieve my goal or will I need that server?

like image 877
Kasper Holdum Avatar asked Jul 26 '09 00:07

Kasper Holdum


3 Answers

You'll need a server to exchange IP address and such. As the other thread literally points out, the only way of guaranteeing a connection is to proxy through a server. Most peer to peer systems use UPnP and NAT Hole Punching (this method needs a server relaying port information and only works with UDP) to establish a connection in most cases.

NAT Hole Punching works by both clients establishing a connection to a server, then the both try to connect directly to a port that the other has relayed to the other. Most UDP NAT remember the IP address and port for a short time, so although the data never made it to the other end (not that this matters with UDP) the other client will try to connect a few moments later to that report as the NAT would expect the reply.

like image 169
ewanm89 Avatar answered Oct 10 '22 20:10

ewanm89


A very good reading, made just for you :-), is RFC 5128, "State of Peer-to-Peer (P2P) Communication across Network Address Translators (NATs)".

like image 36
bortzmeyer Avatar answered Oct 10 '22 20:10

bortzmeyer


Check out the P2P channel with WCF: http://msdn.microsoft.com/en-us/library/cc297274.aspx

It works quite well.

like image 42
codekaizen Avatar answered Oct 10 '22 20:10

codekaizen