WCF与P2P
WCF是用来实现数据通信的,这篇文章中。我将带领大家进入WCF的P2P的世界。通过一个实例,说明WCF中使用P2P。

图一:围绕中心服务器打转
图二:P2P分布
实例的功能
我实现的这个例子的功能是:在一个局域网内,有很多台电脑。当其中一台电脑实现了复制或者剪贴,在其他的电脑上将显示复制和剪贴的数据。你可以实现Ctrl+C或者Ctrl+X进行数据复制或者剪贴。在其他的电脑上有一个窗体专门显示你复制或者剪贴的数据(限定了文本数据)。
实现这个程序有两个难点:
1、如何监听Ctrl+C或者Ctrl+X等事件
2、不需要特定的服务端(不通过WCF的双工通信),如果通过P2P去实现数据通信。
实例的实现:
下面根据这两个难点来展开去实现。
一、事件监听:
1、在WindowsForm应用程序中,protected override void WndProc(ref System.Windows.Forms.Message m)方法可以供我们去重载来实现事件的监听。判断Message的编号,如果是复制或者剪贴事件。我们就去通过WCF的P2P服务来广播剪贴板中的信息。代码如下:
2、然后提交给User32.dll处理:
通过上面的代码,我们解决了第一个问题:如何监听Ctrl+C或者Ctrl+X等事件。
二、在WCF中,我们要通过NetPeerTcpBinding实现P2P。
下面我就一步一步的实现这个P2P的应用服务。
1、定义契约和实现契约:
在WindowsForm中,通过DisplayClipboardData()方法来调用此服务,代码如下。
还有就是一个方法来接受信息方法AddToClip,代码如下:
由于WCF得回调和WindowsForm的主线程不是一个,故使用了一个委托:
其他详细见代码。
实例的效果:
在电脑zhuqilin上复制文本数据
在电脑Colin上显示zhuqilin上复制的数据:
总结:
上星期用WCF的双工实现了一个音频聊天室的程序。有园友提出点对点的视频、语音、聊天用P2P去实现效率和性能更好,故研究了一下WCF的P2P。本文就是一个简单的WCF的P2P的例子。
扩展:
这篇文章只实现了文字剪贴板的共享功能。如果你有兴趣,可以进一步扩展。
扩展1:数据直接传递到其他电脑的剪贴板上,可以直接Ctrl+V粘贴。
扩展2:现在只是实现文字剪贴板的共享。扩展成文件、视频、图片都可以。
效果可以是:如果局域网的两个端点机器通过共享自己的剪贴板。在A机器上复制文件,在B机器上可以直接粘贴。
写这个例子的灵感来自RealVNC。用过RealVNC的童鞋都知道,无论局域网还是外网,只要两台pc建立连接,就能共享剪贴板上的数据了。
最后:建立P2P和打开P2P管道需要时间,故在运行这个程序的之后,需要等上一段时间才能共享你的剪贴板。如果有建议请留言,有帮助请推荐。thx。
本文转自麒麟博客园博客,原文链接:http://www.cnblogs.com/zhuqil/archive/2010/06/20/wcf-p2p-demo.html,如需转载请自行联系原作者