#眉標=.NET 3.5、P2P、 #副標=.NET Framework 3.5應用開發(4) #大標=.NET P2P之協同作業 #作者=文/圖 黃嘉輝 ===<反灰>============= public static PeerNearMeCollection GetPeersNearMe() ================ ============= 程式1 // 取得目前所有登入的Peer端點 PeerNearMeCollection pnmc = PeerCollaboration.GetPeersNearMe(); String str = ""; foreach (PeerNearMe pnm in pnmc) { // 取得Peer端點的暱稱 str = pnm.Nickname; // 取得Peer端點的位置 PeerEndPointCollection pepc = pnm.PeerEndPoints; ... } ================ ============= 程式2 // 取得Peer端點的位置 PeerEndPointCollection pepc = pnm.PeerEndPoints; foreach (PeerEndPoint pep in pepc){ // 回傳System.Net.IPEndPoint物件 IPEndPoint ipEndPoint = pep.EndPoint; // 取得Peer端點的IP位址 str = ipEndPoint.Address.ToString() + ":"; // 取得Peer端點的通訊埠 str = str + ipEndPoint.Port.ToString(); } ================ ===<反灰>============= public static event EventHandler PeerNearMeChanged ================ ============= 程式3 using System.Net.PeerToPeer.Collaboration; ... // 宣告當Peer端點登入或登出時所觸發之事件 // 並定義所呼叫的方法為PeerNearMeChangedCallback PeerNearMe.PeerNearMeChanged += new EventHandler( PeerNearMeChangedCallback); ... // 自訂當Peer端點登入或登出時所呼叫的方法 private void PeerNearMeChangedCallback( object sender, PeerNearMeChangedEventArgs e){ // 重新取得Peer端點之相關資訊 ... } ================ ===<反灰>============= public event EventHandler RefreshDataCompleted ================ ============= 程式4 using System.Net.PeerToPeer.Collaboration; ... // 宣告當Peer端點登入或登出時所觸發之事件 // 並定義所呼叫的方法為PeerNearMeChangedCallback PeerNearMe.PeerNearMeChanged += new EventHandler (PeerNearMeChangedCallback); ... // 自訂當Peer端點登入或登出時所呼叫的方法 private void PeerNearMeChangedCallback( Object sender, PeerNearMeChangedEventArgs e) String str = ""; PeerNearMe pnm = e.PeerNearMe as PeerNearMe; // 取得Peer端點的位置 PeerEndPointCollection pepc = pnm.PeerEndPoints; foreach (PeerEndPoint pep in pepc) { // 回傳System.Net.IPEndPoint物件 IPEndPoint ipEndPoint = pep.EndPoint; // 取得Peer端點的IP位址 str = ipEndPoint.Address.ToString() + ":"; // 取得Peer端點的通訊埠 str = str + ipEndPoint.Port.ToString(); } // 取得PeerNearMe物件所發生的變更類型 switch (e.PeerChangeType) { // 當有新的Peer端點登入時 case PeerChangeType.Added: lstPeer.Items.Add(str); break; // 當Peer端點登出時 case PeerChangeType.Deleted: break; // 當Peer端點因相關資訊更新時 case PeerChangeType.Updated: lstPeer.Items.Add(str); break; default: break; } ================ ===<反灰>============= public override PeerInvitationResponse Invite() ================ ===<反灰>============= public override PeerInvitationResponse Invite( PeerApplication applicationToInvite, string message, byte[] invitationData) ================ ============= 程式5 // 取得協同作業分享之應用程式 PeerApplicationCollection pac = PeerCollaboration. GetLocalRegisteredApplications(); try { PeerNearMe peer = new PeerNearMe(...); // 傳送邀請至Peer端點 PeerInvitationResponse response = peer.Invite(pa, "接受邀請加入協同作業?", null); switch (response.PeerInvitationResponseType) { // 接受邀請 case PeerInvitationResponseType.Accepted: ... break; // 拒絕邀請 case PeerInvitationResponseType.Declined: ... break; // 邀請請求已過期 case PeerInvitationResponseType.Expired: ... break; } } ================ 5