自动ping博客服务程序

简介:

几个月前写了一个博客自动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
分类:  ASP.NET
本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2013/03/18/2965954.html ,如需转载请自行联系原作者
相关文章
|
2月前
|
Windows
【计算机网络】已解决:“‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”报错
【计算机网络】已解决:“‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”报错
241 0
|
测试技术 Windows
解决“‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。”的问题
解决“‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。”的问题
929 0
|
网络协议
“ping”程序知多少
       最近阅读了《TCP/IP详解 卷1:协议》。作者对“TCP/IP协议族”进行了详细的介绍,让读者对因特网上运行的协议有了一个全面的了解。
997 0
|
1月前
|
监控 网络协议 JavaScript
tcping和ping命令
【8月更文挑战第2天】`tcping` 是一款基于 TCP 协议的网络测试工具,不同于传统的 `ping` 命令使用 ICMP 协议,`tcping` 通过尝试与目标主机的特定端口建立 TCP 连接来检查网络连通性和端口状态。这使其在一些禁用了 ICMP 的网络环境中特别有用。`
63 3
tcping和ping命令
|
1月前
|
网络协议 网络安全 网络架构
ping命令详解
【8月更文挑战第14天】 ping命令详解
59 3
|
1月前
|
域名解析 监控 网络协议
Ping命令的替代工具有哪些?
【8月更文挑战第14天】Ping命令的替代工具有哪些?
30 2
|
1月前
|
网络协议 测试技术 网络架构
Ping命令的用途?
【8月更文挑战第14天】Ping命令的用途?
37 2
|
1月前
|
网络协议 Unix Linux
Ping命令
【8月更文挑战第10天】Ping命令
36 3