After you have registered a service, the next step is to find it again. The System.Net.PeerToPeer API includes a PeerNameResolver class which does that.
You input the peer name and get back the registration details (IP addresses, port, comment and data):
static void Resolve(string name)
{
PeerNameResolver resolver = new PeerNameResolver();
PeerName peerName = new PeerName(name);
Console.WriteLine(“Resolving {0}…”, peerName);
Console.WriteLine();
PeerNameRecordCollection results = resolver.Resolve(peerName);
if (results.Count == 0)
{
Console.WriteLine(“No records found.”);
return;
}
int count = 1;
foreach (PeerNameRecord record in results)
{
Console.WriteLine(“Record #{0}n”, count);
Console.WriteLine(“DNS Name: {0}”, record.PeerName.PeerHostName);
Console.WriteLine(“Endpoints:”);
foreach (IPEndPoint endpoint in record.EndPointCollection)
{
Console.WriteLine(“t Endpoint:{0}”, endpoint);
}
count++;
}
}
The way you will resolve peer names more commonly is via the DNS format (the PeerHostName property in the above code). A peer name also has DNS name representation (e.g. foo.pnrp.net for an unsecured service named foo). Whenever you use this format (e.g. with ping or any other application that does DNS name resolution), Windows will use the P2P APIs internally to return the corresponding IP address). See here for the details.
This e.g. means that you could make a registration on a web server for port 80 and can use the browser to directly connect to the web server using the DNS format name.