您现在的位置: > 首页 > 软件应用 > 操作系统
>> 最新教程
>> 热门教程
>> 最新游戏资讯
>> 热门游戏资讯
利用Vista和WCF中强大P2P通信功能
作者:本站                来自:安迪教程网                 加入时间:08-07-03                进入论坛讨论

  只要调用了 ServiceHost.Open,我们的应用程序就会尝试通过 PNRP 来解析网格名 (pictureView)。此时,我可以通过运行 netsh 命令以列出注册的对等名称来验证我们的 PeerChannel 应用程序是否正在使用 PNRP。如果 PNRP 可以将网格名解析为一个或多个 IP 地址,则我们的应用程序将尝试连接到这些节点。如果不是这样,则该节点将成为网格中的第一个节点。如前所述,现有节点将通过发送欢迎消息或拒绝消息来接受或拒绝连接。这里的重要一点是,这种情况有可能在对 ServiceHost.Open 的调用返回后发生。

  将消息发送到其他节点 在共享图片之前,我必须首先加载图片。实现此操作所需的代码是 Windows 窗体基本代码:首先,对 OpenFileDialog 进行实例化,获得一个 Stream,将该 Stream 转换为 Image,然后通过 PictureBox.Image 属性引用 Image。等一下,这不是 SharePicture 方法所执行的操作吗?事实上,确实如此。从本质上说,要将图像加载到 PictureBox 中,我只需要调用 SharePicture 方法,将从 OpenFileDialog.OpenFile 返回的 Stream 作为一个参数传递。

  要将包含图片的消息发送到网格中的其他节点,我必须编写几行代码,但是此代码与您在其他任何 Windows Communication Foundation 应用程序中编写的代码几乎相同。起初,我需要在类型 ChannelFactory 和 IPictureViewer 的窗体中定义一些字段。接下来,我需要在窗体的构造函数中将这些变量实例化。这些步骤如下所示。

  创建发送基础结构

   ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
  publicpartialclassfrmPictureViewer:Form,IPictureViewer
  {
  ChannelFactorychannelFactory;
  IPictureViewerchannel;
  publicfrmPictureViewer()
  {
  InitializeComponent();
  StartReceiving();
  }
  privatevoidStartReceiving()
  {
  //为清晰起见省略其他代码
  channelFactory=newChannelFactory(
  binding,newEndpointAddress(meshAddress));
  channelFactory.Credentials.Peer.MeshPassword="JustinSmith";
  channelFactory.Credentials.Peer.Certificate=GetCertificate();
  channel=channelFactory.CreateChannel();
  }
  ...//为清晰起见省略其他代码
  }

  请注意,所使用的网格密码和证书(用于创建消息的数字签名)与设置 ServiceHost 时所用的必须是同一个。除此之外,此代码要与非 PeerChannel Windows Communication Foundation 应用程序中所需的代码相同。

<<< << < 11 12 > >> >>>
相关教程
联系方式:QQ:6084884 email:agwcn@126.com 粤ICP备05055782号
本网站中发布的文章只代表发表人的个人观点,不代表安迪教程网网站的立场
copyright© 2000-2004 安迪教程网 All rights reserved agwcn.com