博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自动ping博客服务程序
阅读量:6616 次
发布时间:2019-06-24

本文共 3487 字,大约阅读时间需要 11 分钟。

几个月前写了一个博客自动ping程序,其实也没有什么技术含量,只是不想很快被遗忘,在此一记,希望各路好友,批评批正。

ping程序的,用处是把发布文章主动的提交搜索引擎,以便达到让搜索引擎快速收录。

程序原理主要通过RPC协议来实现的,下面简单学习一下RPC协议。

RPC协议

 

  英文原义:Remote Procedure Call Protocol

 

  中文释义:(RFC-1831)远程调用协议

 

  注解:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

 

  RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

 

  RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用过程接收答复信息,获得进程结果,然后调用执行继续进行。

 

程序主界面载图

废话少说了,看代码。ping程序内部核心代码都在这里了。

 

using
 System;
using
 System.Text;
using
 System.Net;
using
 System.IO;
using
 System.Xml;
namespace
 PingService
{
    
public
 
class
 PingBlog
    {
        
private
 
string
 blogName 
=
 
string
.Empty;
        
private
 
string
 blogUrl 
=
 
string
.Empty;
        
private
 
string
 rssUrl 
=
 
string
.Empty;
        
private
 
string
 updateUrl 
=
 
string
.Empty;
        
private
 
string
 metaString 
=
 
string
.Empty;
        
public
 PingBlog(
string
 name, 
string
 url, 
string
 fredUrl, 
string
 updateUrl, 
string
 tag)
        {
            blogName 
=
 name;
            blogUrl 
=
 url;
            rssUrl 
=
 fredUrl;
            
this
.updateUrl 
=
 updateUrl;
            metaString 
=
 tag;
        }
//
传参数传递需要ping目标 URL
        
public
 
string
 StartPing(
string
 pingURL)
        {
            StreamReader sr 
=
 
null
;
            StringBuilder sb 
=
 
new
 StringBuilder();
            
string
 strOutput 
=
 
string
.Empty;
            
string
 strXML 
=
 
string
.Empty;
            
try
            {
                strXML 
=
 BuildRCXML();
                
int
 len 
=
 strXML.Length;
                ASCIIEncoding ascii 
=
 
new
 ASCIIEncoding();
                HttpWebRequest webReq 
=
 (HttpWebRequest)WebRequest.Create(pingURL);
                webReq.Method 
=
 
"
POST
"
;
                webReq.Timeout 
=
 
3000
;
//
超时为3秒
           webReq.ContentType 
=
 
"
text/xml
"
;
                webReq.Credentials 
=
 CredentialCache.DefaultNetworkCredentials;
                webReq.ContentLength 
=
 len;
                Stream streamRequest 
=
 webReq.GetRequestStream();
                
byte
[] bt 
=
 ascii.GetBytes(strXML);
                streamRequest.Write(bt, 
0
, len);
                HttpWebResponse webRes 
=
 (HttpWebResponse)webReq.GetResponse();
                sr 
=
 
new
 StreamReader(webRes.GetResponseStream(), Encoding.ASCII);
                
string
 ret 
=
 sr.ReadToEnd();
                sb.AppendLine(
"
\n
"
);
                sb.AppendLine(ret);
                
if
 (ret.IndexOf(
"
<boolean>0</boolean>
"
)
>=
0
)
                {
                    sb.AppendLine(
"
\n\t Ping服务提交成功!
"
);
                }
                
else
 
if
 (ret.IndexOf(
"
<boolean>1</boolean>
"
>=
 
0
)
                {
                    sb.AppendLine(
"
\n\t Ping服务提交失败!
"
);
                }
              
if
 (sr 
!=
 
null
)
                {
                    sr.Close();
                   sr
=
null
;
                }
            }
            
catch
 (Exception ex)
            {
                sb.AppendLine(ex.Message);
                sb.AppendLine(ex.StackTrace);
            }
            
finally
            {
                strOutput 
=
 sb.ToString();
                
if
(sr
!=
null
)
                {
                    sr.Dispose();
                }
            }
            
return
 strOutput;
        }
//
根据RPC协议API文档构造XML
      
private
 
string
 BuildRCXML()
        {
            System.Text.StringBuilder sb 
=
 
new
 System.Text.StringBuilder();
            sb.Append(
"
<?xml version=\"1.0\"?>
"
);
            sb.Append(
"
<methodCall>
"
);
            sb.Append(
"
<methodName>weblogUpdates.extendedPing</methodName>
"
);
//
weblogUpdates.ping
            sb.Append(
"
<params>
"
);
            sb.Append(
"
<param>
"
);
            sb.AppendFormat(
"
<value>{0}</value>
"
, blogName);
            sb.Append(
"
</param>
"
);
            sb.Append(
"
<param>
"
);
            sb.AppendFormat(
"
<value>{0}</value>
"
, blogUrl);
            sb.Append(
"
</param>
"
);
            sb.Append(
"
<param>
"
);
            sb.AppendFormat(
"
<value>{0}</value>
"
, updateUrl);
            sb.Append(
"
</param>
"
);
            sb.Append(
"
<param>
"
);
            sb.AppendFormat(
"
<value>{0}</value>
"
, rssUrl);
            sb.Append(
"
</param>
"
);
            sb.Append(
"
<param>
"
);
            sb.AppendFormat(
"
<value>{0}</value>
"
, metaString);
            sb.Append(
"
</param>
"
);
            sb.Append(
"
</params>
"
);
            sb.Append(
"
</methodCall>
"
);
            
return
 sb.ToString();
            }
    }
}

 

整个源码包下载点击此处!转载请保留原文地址
 
 
 
http://www.cnblogs.com/cgli/archive/2011/04/01/2001958.html
分类: 
本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2013/03/18/2965954.html
,如需转载请自行联系原作者
你可能感兴趣的文章
Mysql学习第三课-分析二进制日志进行增量备份和还原
查看>>
HDU 6073 - Matching In Multiplication | 2017 Multi-University Training Contest 4
查看>>
如何检测域名是否被微信屏蔽 微信域名检测接口API是如何实现
查看>>
POJ1611-The Suspects
查看>>
Linux下安装Python-3.3.2【转】
查看>>
LeetCode OJ:Merge Two Sorted Lists(合并两个链表)
查看>>
功能测试
查看>>
【BZOJ 1901】Dynamic Rankings
查看>>
【转】聚集索引和非聚集索引的区别
查看>>
Github-Client(ANDROID)开源之旅(二) ------ 浅析ActionBarSherkLock
查看>>
eclipse中如何去除警告:Class is a raw type. References to generic type Class<T> should be parameterized...
查看>>
React-Native 之 GD (十六)首页筛选功能
查看>>
SSISDB5:使用TSQL脚本执行Package
查看>>
asp.net后台进程做定时任务
查看>>
给vs2012换肤
查看>>
java接口中多继承的问题
查看>>
索引笔记《二》确定需要建立索引的列
查看>>
libjpeg的问题
查看>>
Ubuntu+Apache+PHP+Mysql环境搭建(完整版)
查看>>
深度学习笔记之CNN(卷积神经网络)基础
查看>>