C# p2p(1)
C# p2p(1)
2012年01月17日
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Net.PeerToPeer; namespace ConsoleApplication4
{
class Program
{
static string strMYPeername = "myApplicationName";
static string strAllMyPeername = "";
static int port;
static PeerNameRegistration peernameregistration; static void Main(string[] args)
{
registerPeer();
resoveName("0."+strMYPeername);
Console.Read();
} public static void getPort()
{
while (true)
{
port = new Random().Next(50000,51000);
try
{
TcpListener listener = new TcpListener(IPAddress.Any, port);
listener.Start();
}
catch
{
continue;
}
break;
}
} //把PNRP NAME 注册到Cloud中
public static void registerPeer()
{
getPort();//获取要连线的IP&PORT
PeerName peername = new PeerName(strMYPeername, PeerNameType.Unsecured);
//用peername创建注册群,然后把peername注册到群中
peernameregistration = new PeerNameRegistration(peername, port);
peernameregistration.Comment = "pnrp peer name 的其他描述信息";
peernameregistration.Data = Encoding.UTF8.GetBytes(string.Format("注册时间{0}",DateTime.Now.ToString()));
strAllMyPeername = peername.ToString();
peernameregistration.Start();
}
public static void resolverPeer(string myPeername)
{
PeerName peerName = new PeerName("0." + myPeername);
PeerNameResolver resolver = new PeerNameResolver();
PeerNameRecordCollection pmrcs = resolver.Resolve(peerName);
foreach (PeerNameRecord pmrc in pmrcs)
{
foreach (IPEndPoint endpoint in pmrc.EndPointCollection)
{
Console.WriteLine(endpoint);
}
}
}
///解析对等名称
public static void resoveName(string strPeerName)
{
PeerName mypeer = new PeerName(strPeerName);
PeerNameResolver myRes = new PeerNameResolver();
PeerNameRecordCollection recColl = myRes.Resolve(mypeer);
foreach (var record in recColl)
{
foreach (var endp in record.EndPointCollection)
{
if (endp.AddressFamily.Equals(AddressFamily.InterNetw ork))
{
Console.WriteLine(record.PeerName.ToString());
Console.WriteLine(endp.ToString());
Console.WriteLine(Encoding.UTF8.GetString(record.D ata));
Console.WriteLine(record.PeerName.PeerHostName);
}
}
}
}
}
}