예제 #1
0
        public List<PeerInfo> ResolveByPeerHostName(string peerHostName)
        {
            try
            {
                if (string.IsNullOrEmpty(peerHostName))
                    throw new ArgumentException("Cannot have a null or empty host peer name.");

                PeerNameResolver resolver = new PeerNameResolver();
                List<PeerInfo> foundPeers = new List<PeerInfo>();
                var resolvedName = resolver.Resolve(new PeerName(peerHostName, PeerNameType.Unsecured), Cloud.AllLinkLocal);                
                foreach (var foundItem in resolvedName)
                {
                    foreach (var endPointInfo in foundItem.EndPointCollection)
                    {
                        PeerInfo peerInfo = new PeerInfo(foundItem.PeerName.PeerHostName, foundItem.PeerName.Classifier,endPointInfo.Port);
                        peerInfo.Comment = foundItem.Comment;
                        foundPeers.Add(peerInfo);
                    }

                }
                return foundPeers;
               
            }
            catch (PeerToPeerException px)
            {
                throw new Exception(px.InnerException.Message);
            }

        }        
예제 #2
0
        public List<Peer> ResolveByPeerName(string peerName)
        {
            try
            {
                if (string.IsNullOrEmpty(peerName))
                    throw new ArgumentException("Cannot have a null or empty peer name.");

                PeerNameResolver resolver = new PeerNameResolver();
                PeerNameRecordCollection resolvedName = resolver.Resolve(new PeerName(peerName, PeerNameType.Unsecured),
                    Cloud.AllLinkLocal);
                
                List<Peer> foundPeers = new List<Peer>();
                foreach (PeerNameRecord foundItem in resolvedName)
                {
                    Peer peer = new Peer(){
                        PeerName = foundItem.PeerName.Classifier,
                        PeerHostName = foundItem.PeerName.PeerHostName,
                        Comments = foundItem.Comment
                    };

                    foundPeers.Add(peer);
                }

                return foundPeers;
            }
            catch (PeerToPeerException px)
            {
                throw new Exception(px.InnerException.Message);
            }
        }     
예제 #3
0
        public PeerNameResult ResolveHostName(string hostPeerName)
        {
            if (string.IsNullOrEmpty(hostPeerName))
                throw new ArgumentException("Cannot have a null or empty host peer name.");

            PeerNameResolver resolver = new PeerNameResolver();
            
            var results = resolver.Resolve(new PeerName(hostPeerName, PeerNameType.Unsecured),Cloud.Global);

            if (results == null || results.Count == 0)
                throw new PeerToPeerException(string.Format("Unable to resolve {0}", hostPeerName));

            return new PeerNameResult(results[0].PeerName.PeerHostName, results[0].EndPointCollection[0].Port);
        }
예제 #4
0
 private void btnSearch_Click(object sender, EventArgs e)
 {
     this.richTxtSearchResult.Clear();
     PeerName searchSeed = new PeerName("0." + txtSearch.Text);
     PeerNameResolver resolver = new PeerNameResolver();
     PeerNameRecordCollection recordCollection = resolver.Resolve(searchSeed);
     foreach (PeerNameRecord record in recordCollection) {
         foreach (var endPoint in record.EndPointCollection) {
             if (endPoint.AddressFamily.Equals(AddressFamily.InterNetwork)) {
                 this.richTxtSearchResult.AppendText("\n" + endPoint.ToString() + ";" + Encoding.UTF8.GetString(record.Data));
             }
         }
     }
 }
예제 #5
0
        public void ResolvePeerName(string peerId)
        {
            if (string.IsNullOrEmpty(_username))
            {
                throw new ArgumentNullException(nameof(_username));
            }

            System.Net.PeerToPeer.PeerNameResolver resolver = new System.Net.PeerToPeer.PeerNameResolver();
            //PeerNameResolver resolvered = new PeerNameResolver(_username);
            var result = resolver.Resolve(new PeerName(peerId, PeerNameType.Unsecured), Cloud.AllLinkLocal);
            //var resulted = resolvered.ResolvePeerName

            //if (result.Any())
            //    PeerEndPointCollection = new PeerEndPointsCollection(result[0].PeerName, result[0].EndPointCollection);
        }
        public void ResolvePeerName()
        {
            if (string.IsNullOrEmpty(_username))
            {
                throw new ArgumentNullException(nameof(_username));
            }

            System.Net.PeerToPeer.PeerNameResolver resolver = new System.Net.PeerToPeer.PeerNameResolver();
            var result = resolver.Resolve(new PeerName(_username), Cloud.AllLinkLocal);

            if (result.Any())
            {
                PeerEndPointCollection = new PeerEndPointsCollection(result[0].PeerName, result[0].EndPointCollection);
            }
        }
예제 #7
0
        void Init()
        {
            StringBuilder str = new StringBuilder();
            PeerName myPeer = new PeerName("MySecurePeer", PeerNameType.Secured);
            PeerNameResolver resolver = new PeerNameResolver();
            PeerName peerName = new PeerName(classifier, PeerNameType.Secured);
            PeerNameRecordCollection results = resolver.Resolve(myPeer);

            str.AppendLine(string.Format("{0} Peers Found:", results.Count.ToString()));
            int i = 1;
       
            foreach (PeerNameRecord peer in results)
            {
                str.AppendLine(string.Format("{0} Peer:{1}", i++, peer.PeerName.ToString()));
                
                foreach (IPEndPoint ip in peer.EndPointCollection)
                {
                    str.AppendLine(string.Format("\t Endpoint: {0}, port {1}", ip.Address.ToString(),ip.Port.ToString()));
                    
                }
            }
            textBox1.Text = str.ToString();

        }
예제 #8
0
파일: Form1.cs 프로젝트: svn2github/eztx
        // 搜索资源
        private void btnSearch_Click(object sender, EventArgs e)
        {
            if (tbxSeed.Text == "")
            {
                MessageBox.Show("请先输入要寻找的种子资源名", "提示");
                return;
            }

            lstViewOnlinePeer.Items.Clear();
            // 初始化要搜索的资源名
            PeerName searchSeed = new PeerName("0." + tbxSeed.Text);
            // PeerNameResolver类是将节点名解析为PeerNameRecord的值(即将通过资源名来查找资源名所在的地址,包括IP地址和端口号)
            // PeerNameRecord用来定于云中的各个节点
            PeerNameResolver myresolver = new PeerNameResolver();

            // PeerNameRecordCollection表示PeerNameRecord元素的容器
            // Resolve方法是同步的完成解析
            // 使用同步方法可能会出现界面“假死”现象
            // 解决界面假死现象可以采用多线程或异步的方式
            // 关于多线程的知识可以参考本人博客中多线程系列我前面UDP编程中有所使用
            // 在这里就不列出多线程的使用了,朋友可以自己实现,如果有问题可以留言给我一起讨论
            PeerNameRecordCollection recordCollection = myresolver.Resolve(searchSeed);
            foreach (PeerNameRecord record in recordCollection)
            {
                foreach(IPEndPoint endpoint in record.EndPointCollection)
                {
                    if (endpoint.AddressFamily.Equals(AddressFamily.InterNetwork))
                    {
                        ListViewItem item = new ListViewItem();
                        item.SubItems.Add(endpoint.ToString());
                        item.SubItems.Add(Encoding.UTF8.GetString(record.Data));
                        lstViewOnlinePeer.Items.Add(item);
                    }
                }
            }
        }