<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_无知之家</title><subtitle type="text">敢于发现和承认无知，发现无知才能明确方向，承认无知才能发展创新；发现无知是一种智慧，承认无知是一种勇气</subtitle><id>http://feed.cnblogs.com/blog/u/25396/rss</id><updated>2010-11-02T07:07:06Z</updated><author><name>无名-小卒</name><uri>http://www.cnblogs.com/markor/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/markor/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/25396/rss"/><entry><id>http://www.cnblogs.com/markor/archive/2010/11/02/1867154.html</id><title type="text">IFSBrowser:一个老外的p2p软件</title><summary type="text">原文地址：http://www.codeproject.com/webservices/ifs.asp第一次翻译，还只是翻译了部分文章。作者最近好像还有更新。这是一个p2p软件，全称Internet File System，网络文件系统。是基于WebService实现的。实现的功能是：可以把自己的文件注册到网络上，让大家共享。全文205k，我实在没有勇气去翻译。捡几个重要的部分介绍一下。1：结构：...</summary><published>2010-11-02T07:07:00Z</published><updated>2010-11-02T07:07:00Z</updated><author><name>无名-小卒</name><uri>http://www.cnblogs.com/markor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/markor/archive/2010/11/02/1867154.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/markor/archive/2010/11/02/1867154.html"/><content type="html">&lt;p&gt;原文地址：&lt;br /&gt;&lt;a href="http://www.codeproject.com/webservices/ifs.asp"&gt;http://www.codeproject.com/webservices/ifs.asp&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;第一次翻译，还只是翻译了部分文章。&lt;/p&gt;&lt;p&gt;作者最近好像还有更新。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;这是一个p2p软件，全称Internet File System，网络文件系统。是基于WebService实现的。实现的功能是：可以把自己的文件注册到网络上，让大家共享。&lt;br /&gt;全文205k，我实在没有勇气去翻译。捡几个重要的部分介绍一下。&lt;br /&gt;&lt;br /&gt;1：结构：&lt;br /&gt;&amp;nbsp; peer 一个使用端，可以发布自己的文件让其网络共享，也可以获取一个声明为发布的文件到本地。&lt;br /&gt;&amp;nbsp; Server 静态单一（singleton）的服务端，设有WebService。&lt;br /&gt;&amp;nbsp; WebService：这个软件就是靠它实现p2p的了。定义？自己查吧。&lt;br /&gt;&lt;br /&gt;2：使用方法：&lt;br /&gt;&amp;nbsp; 注册--〉登陆--〉可以查看获取网络文件/发布自己的文件。&lt;br /&gt;&lt;br /&gt;3：Server是把每个使用端声明为发布的文件的（基本信息+发布用户端机器信息）注册到DB里面。诸如 文件名，文件所在文件夹名，大小，发布者信息（ip，port），虚拟目录名（好像是ifs自己的目录）&lt;br /&gt;&lt;br /&gt;4：防火墙和&amp;#8220;推&amp;#8221;&amp;#8220;拉&amp;#8221;。&lt;br /&gt;&amp;nbsp; 事先定义：请求需要下载文件f的一端叫做p1，这个文件的所有者叫p2，服务器叫s。&amp;nbsp; 考虑这四种情况：&lt;br /&gt;&amp;nbsp; a：p1和p2都不在防火墙里面。也就是说p1和p2时可以互相看见的。这时候，下载文件的流程是这样的：p1登陆到s，获取f的基本信息。p1可以从这个信息里面获取f的所有者p2的一些基本信息，如ip，端口号，是否在火墙里等。既然p2部在火墙里面，p1就可以直接向p2（知道了他的endponit,that is ip+port）发送一个pull的命令.pull，简单的翻译为&amp;#8220;拉&amp;#8221;。即p1从p2的机器上直接找到文件，下载。&lt;br /&gt;&amp;nbsp; b：p1不在火墙里，p2在火墙里面。这时候，p1是无法找到p2的。如何实现下载呢？方法叫做&amp;#8220;Push&amp;#8221;，简单的翻译为&amp;#8220;推&amp;#8221;。因为p1不在火墙里面，所以p2时可以访问到p1的。操作流程是这样的：p1登陆s，获取f的所有者p2的信息，发现在火墙里面，于是乎，p1向s发出请求，附加一个Push文件的Task给p2，p2的一个线程获取这个Task和p1的endpoint，然后p2主动向p1发送文件f。当然了，p1在发送了Push的请求之后，就准备接受文件了。&lt;br /&gt;&amp;nbsp; c：p1在火墙里，p2不在火墙里。很容易，和第一种情况一样。&lt;br /&gt;&amp;nbsp; d：p1和p2都在火墙里。这就意味着p1和p2都是不可见的。这时候，该s出马了。p1首先会像s发出一个请求Task，p2接受，但是发现p1也在墙里，so，p2把文件upload到s上面的一个空间上，上传结束后，通知p1（当然是通过s中转这个消息了），p1开始到s上找到这个空间，开始下载文件。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;第一次看这么长的c++代码。我在看源码的时候，看到的一些重要的东东。&lt;br /&gt;&lt;br /&gt;1：__gc*:声明为回收类型&lt;br /&gt;2：PushCommand，PullCommand：&lt;font color="#6495ed"&gt;for what?&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;3：public __value enum TaskType : unsigned char&lt;br /&gt;PushFile = 1,&amp;nbsp; &amp;nbsp; // &lt;br /&gt;DownloadFile = 2, // unimplemented&lt;br /&gt;UploadFile = 3 // ditto&lt;br /&gt;&lt;br /&gt;4：S"Press ENTER to stop the server..."//to String type&lt;br /&gt;5: class P2PConfig. use to manage the xml config file which log the very info for system. the file name is 'IFS.P2P.xml'&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-16"?&amp;gt;&lt;br /&gt;&amp;lt;p2pconfig&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;item key="PeerID"&amp;gt;851966d6-35d0-4d08-b251-9641d3616b63&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;item key="IpAddress"&amp;gt;127.0.0.1&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;item key="Port"&amp;gt;12000&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;item key="P2PFmkNamespace"&amp;gt;InternetFileSystem.P2PFramework&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;item key="ThreadSleepTime"&amp;gt;100&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;item key="ThreadJoinTime"&amp;gt;1000&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;!-- poll for tasks each 10 minutes --&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;item key="TaskPollInterval"&amp;gt;600000&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;lt;/p2pconfig&amp;gt;&lt;br /&gt;6:class NetHelper.use to manage all the net transport task.include 'Connect' to a IPEndPoint,'Close','WriteLine' by BufferSize=1024,'Read/WriteArray', and so on.&lt;br /&gt;7:works only if the remote peer is not behind firewall&lt;br /&gt;8:PublishFile.there are several situation for PublishFile:'PublishFile','PublishFileHere'. use virtualFolderPath&lt;br /&gt;9:properties of a peer&lt;br /&gt;String __gc* id;&lt;br /&gt;String __gc* login;&lt;br /&gt;String __gc* password;&lt;br /&gt;String __gc* alias;&lt;br /&gt;String __gc* ipEndPoint;&lt;br /&gt;System::Boolean behindFirewall;&lt;br /&gt;10:use WebService.//a funny file 'IFSWebService.wsdl'&lt;br /&gt;11:interface ICommandExecutor (PeerCommand __gc* command,NetHelper __gc* netHelper)&lt;br /&gt;12:&lt;font color="#6495ed"&gt;like '3',what's meaning of 'Pull'and'Push','Peer'and'Library'?&lt;/font&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PeerPull = 0, // issued FROM a remote peer&lt;br /&gt;PeerPush = 1, // ditto&lt;br /&gt;LibraryPush = 2, // issued from the library&lt;br /&gt;LibraryPull = 3, // ditto&lt;br /&gt;&lt;br /&gt;Download = 4, // UNSUPPORTED in this version&lt;br /&gt;Upload = 5, // ditto&lt;br /&gt;13:properties of Server&lt;br /&gt;int port;&lt;br /&gt;ServerStatus status;&lt;br /&gt;TcpListener __gc* listener;&lt;br /&gt;Thread __gc* &lt;font color="#6495ed"&gt;p2pThread;&lt;/font&gt;&lt;br /&gt;int threadSleepTime;&lt;br /&gt;int threadJoinTime;&lt;br /&gt;String __gc* namespaceName;&lt;br /&gt;Thread __gc* &lt;font color="#6495ed"&gt;taskThread;&lt;/font&gt;&lt;br /&gt;// the "int" can handle about a month time&lt;br /&gt;int taskPollInterval;&lt;br /&gt;String __gc* peerID;&lt;br /&gt;IFSWebService __gc* webService;&lt;br /&gt;14:class ServerManager have 3 method:SendPushCommand,SendPullCommand,SendMessage.&lt;font color="#6495ed"&gt;why&amp;nbsp; send the two commands?&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/markor/aggbug/1867154.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/markor/archive/2010/11/02/1867154.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/markor/archive/2009/04/22/1441497.html</id><title type="text">Asp.net中SqlServer模式Session的多站点共享会话状态</title><summary type="text">先记录下过程：1。修改配置文件&lt;system.web&gt;&lt;!-- 让其在跨站点访问时,使SESSION能共用 --&gt;&lt;httpCookies domain="CSDN.Net" /&gt;&lt;!-- 设置Session模式为SQLServer --&gt;&lt;sessionState mode="SQLServer" sqlConnectionString="D...</summary><published>2009-04-22T09:31:00Z</published><updated>2009-04-22T09:31:00Z</updated><author><name>无名-小卒</name><uri>http://www.cnblogs.com/markor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/markor/archive/2009/04/22/1441497.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/markor/archive/2009/04/22/1441497.html"/><content type="text">先记录下过程：1。修改配置文件&lt;system.web&gt;&lt;!-- 让其在跨站点访问时,使SESSION能共用 --&gt;&lt;httpCookies domain="CSDN.Net" /&gt;&lt;!-- 设置Session模式为SQLServer --&gt;&lt;sessionState mode="SQLServer" sqlConnectionString="D...</content></entry><entry><id>http://www.cnblogs.com/markor/archive/2009/04/22/1441479.html</id><title type="text">使用aspnet_regsql.exe 创建ASPState数据库,用来保存session会话 </title><summary type="text">因为公司有多台服务器,所以session要保存在sql server上,因此要在数据库中建立存放session的数据库ASPState,在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727下找到了生成ASPState的sql:InstallSqlState.sql马上打开,放到查询分析器里执行,怪了,在这里出问题了,报出了如下错误:-------------...</summary><published>2009-04-22T08:45:00Z</published><updated>2009-04-22T08:45:00Z</updated><author><name>无名-小卒</name><uri>http://www.cnblogs.com/markor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/markor/archive/2009/04/22/1441479.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/markor/archive/2009/04/22/1441479.html"/><content type="text">因为公司有多台服务器,所以session要保存在sql server上,因此要在数据库中建立存放session的数据库ASPState,在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727下找到了生成ASPState的sql:InstallSqlState.sql马上打开,放到查询分析器里执行,怪了,在这里出问题了,报出了如下错误:-------------...</content></entry><entry><id>http://www.cnblogs.com/markor/archive/2009/01/13/1374720.html</id><title type="text">TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞</title><summary type="text"/><published>2009-01-13T03:38:00Z</published><updated>2009-01-13T03:38:00Z</updated><author><name>无名-小卒</name><uri>http://www.cnblogs.com/markor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/markor/archive/2009/01/13/1374720.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/markor/archive/2009/01/13/1374720.html"/><content type="text"/></entry><entry><id>http://www.cnblogs.com/markor/archive/2009/01/12/1374056.html</id><title type="text">P2P之后是P4P</title><summary type="text">（计算机世界报 2008年09月08日第34期 40） 2008-09-06 18:19:57 与P2P随机挑选资源点不同，P4P协议（Proactive network Provider Participation for P2P）可以利用网络拓扑数据，选择最佳的资源点，从而提高网络路由效率。  </summary><published>2009-01-12T03:45:00Z</published><updated>2009-01-12T03:45:00Z</updated><author><name>无名-小卒</name><uri>http://www.cnblogs.com/markor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/markor/archive/2009/01/12/1374056.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/markor/archive/2009/01/12/1374056.html"/><content type="text">（计算机世界报 2008年09月08日第34期 40） 2008-09-06 18:19:57 与P2P随机挑选资源点不同，P4P协议（Proactive network Provider Participation for P2P）可以利用网络拓扑数据，选择最佳的资源点，从而提高网络路由效率。  </content></entry><entry><id>http://www.cnblogs.com/markor/archive/2009/01/12/1374033.html</id><title type="text">NAT的完全分析及其UDP穿透的完全解决方案</title><summary type="text">一:基本术语防火墙防火墙限制了私网与公网的通信，它主要是将（防火墙）认为未经授权的的包丢弃，防火墙只是检验包的数据，并不修改数据包中的IP地址和TCP/UDP端口信息。网络地址转换（NAT）当有数据包通过时，网络地址转换器不仅检查包的信息，还要将包头中的IP地址和端口信息进行修改。以使得处于NAT之后的机器共享几个仅有的公网IP地址（通常是一个）。网络地址转换器主要有两种类型.P2P应用程序P2P应用程序是指，在已有的一个公共服务器的基础上，并分别利用自己的私有地址或者公有地址（或者两者兼备）来建立一个端到端的会话通信。P2P防火墙P2P防火墙是一个提供了防火墙的功能的P2P代理，但是不进行地址转换.P2P-NATP2P-NAT 是一个 P2P代理,提供了NAT的功能,也提供了防火墙的功能,一个最简的P2P代理必须具有锥形NAT对Udp通信支持的功能,并允许应用程序利用Udp打洞技术建立强健的P2P连接。回环转换当NAT的私网内部机器想通过公共地址来访问同一台局域网内的机器的时，NAT设备等价于做了两次NAT的事情，在包到达目标机器之前，</summary><published>2009-01-12T03:16:00Z</published><updated>2009-01-12T03:16:00Z</updated><author><name>无名-小卒</name><uri>http://www.cnblogs.com/markor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/markor/archive/2009/01/12/1374033.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/markor/archive/2009/01/12/1374033.html"/><content type="text">一:基本术语防火墙防火墙限制了私网与公网的通信，它主要是将（防火墙）认为未经授权的的包丢弃，防火墙只是检验包的数据，并不修改数据包中的IP地址和TCP/UDP端口信息。网络地址转换（NAT）当有数据包通过时，网络地址转换器不仅检查包的信息，还要将包头中的IP地址和端口信息进行修改。以使得处于NAT之后的机器共享几个仅有的公网IP地址（通常是一个）。网络地址转换器主要有两种类型.P2P应用程序P2P应用程序是指，在已有的一个公共服务器的基础上，并分别利用自己的私有地址或者公有地址（或者两者兼备）来建立一个端到端的会话通信。P2P防火墙P2P防火墙是一个提供了防火墙的功能的P2P代理，但是不进行地址转换.P2P-NATP2P-NAT 是一个 P2P代理,提供了NAT的功能,也提供了防火墙的功能,一个最简的P2P代理必须具有锥形NAT对Udp通信支持的功能,并允许应用程序利用Udp打洞技术建立强健的P2P连接。回环转换当NAT的私网内部机器想通过公共地址来访问同一台局域网内的机器的时，NAT设备等价于做了两次NAT的事情，在包到达目标机器之前，</content></entry><entry><id>http://www.cnblogs.com/markor/archive/2009/01/09/1372354.html</id><title type="text">SQL Server 跨服务器操作</title><summary type="text">OPENROWSET包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。当访问链接服务器中的表时，这种方法是一种替代方法，并且是一种使用 OLE DB 连接并访问远程数据的一次性的、特殊的方法。可以在查询的 FROM 子句中像引用表名那样引用 OPENROWSET 函数。依据 OLE DB 提供程序的能力，还可以将 OPENROWSET 函数引用为 INSERT、UPDATE 或 DEL...</summary><published>2009-01-09T02:34:00Z</published><updated>2009-01-09T02:34:00Z</updated><author><name>无名-小卒</name><uri>http://www.cnblogs.com/markor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/markor/archive/2009/01/09/1372354.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/markor/archive/2009/01/09/1372354.html"/><content type="text">OPENROWSET包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。当访问链接服务器中的表时，这种方法是一种替代方法，并且是一种使用 OLE DB 连接并访问远程数据的一次性的、特殊的方法。可以在查询的 FROM 子句中像引用表名那样引用 OPENROWSET 函数。依据 OLE DB 提供程序的能力，还可以将 OPENROWSET 函数引用为 INSERT、UPDATE 或 DEL...</content></entry><entry><id>http://www.cnblogs.com/markor/archive/2008/11/06/1327813.html</id><title type="text">电话呼叫转移的设置方法大全 </title><summary type="text">固定电话、小灵通【无条件转移】设定：*57*电话号码#取消：#57#【无应答转移】设定：*41*电话号码#取消：#41#【遇忙转移】设定：*40*电话号码#取消：#40# GSM手机【无条件转移】设定：**21*电话号码#取消：##21#【无应答转移】设定：**61*电话号码#取消：##61#【遇忙转移】设定：**67*电话号码#取消：##67# CDMA手机【无...</summary><published>2008-11-06T01:37:00Z</published><updated>2008-11-06T01:37:00Z</updated><author><name>无名-小卒</name><uri>http://www.cnblogs.com/markor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/markor/archive/2008/11/06/1327813.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/markor/archive/2008/11/06/1327813.html"/><content type="text">固定电话、小灵通【无条件转移】设定：*57*电话号码#取消：#57#【无应答转移】设定：*41*电话号码#取消：#41#【遇忙转移】设定：*40*电话号码#取消：#40# GSM手机【无条件转移】设定：**21*电话号码#取消：##21#【无应答转移】设定：**61*电话号码#取消：##61#【遇忙转移】设定：**67*电话号码#取消：##67# CDMA手机【无...</content></entry><entry><id>http://www.cnblogs.com/markor/archive/2008/10/20/1314855.html</id><title type="text"> C#开发终端式短信的原理和方法</title><summary type="text">转: C#开发终端式短信的原理和方法</summary><published>2008-10-20T02:20:00Z</published><updated>2008-10-20T02:20:00Z</updated><author><name>无名-小卒</name><uri>http://www.cnblogs.com/markor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/markor/archive/2008/10/20/1314855.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/markor/archive/2008/10/20/1314855.html"/><content type="text">转: C#开发终端式短信的原理和方法</content></entry><entry><id>http://www.cnblogs.com/markor/archive/2008/10/17/1313396.html</id><title type="text">在C#程序中实现插件架构</title><summary type="text">阅读提示：这篇文章将讲述如何利用C#奇妙的特性，实现插件架构，用插件(plug-ins)机制建立可扩展的解决方案。 </summary><published>2008-10-17T04:49:00Z</published><updated>2008-10-17T04:49:00Z</updated><author><name>无名-小卒</name><uri>http://www.cnblogs.com/markor/</uri></author><link rel="alternate" href="http://www.cnblogs.com/markor/archive/2008/10/17/1313396.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/markor/archive/2008/10/17/1313396.html"/><content type="text">阅读提示：这篇文章将讲述如何利用C#奇妙的特性，实现插件架构，用插件(plug-ins)机制建立可扩展的解决方案。 </content></entry></feed>
