zoukankan      html  css  js  c++  java
  • C# p2p(1)

    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.InterNetwork))
                        {
                            Console.WriteLine(record.PeerName.ToString());
                            Console.WriteLine(endp.ToString());
                            Console.WriteLine(Encoding.UTF8.GetString(record.Data));
                            Console.WriteLine(record.PeerName.PeerHostName);
                        }
                    }
                }
            }

        }
    }

  • 相关阅读:
    CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)
    telnet: Unable to connect to remote host: Connection refused
    bash: telnet: command not found (Linux安装telnet)
    telnet: Unable to connect to remote host: No route to host
    IP地址转换函数
    Linux 网络通信 API详解【转载】
    高效算法求解数独
    Java创建List、Map等集合对象的同时进行赋值操作
    根据先序遍历和中序遍历建立二叉树
    继承内部类时使用外部类对象.super()调用内部类的构造方法
  • 原文地址:https://www.cnblogs.com/Mayvar/p/wanghonghua_201201171129.html
Copyright © 2011-2022 走看看