自动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 ,如需转载请自行联系原作者
相关文章
|
5月前
|
Windows
【计算机网络】已解决:“‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”报错
【计算机网络】已解决:“‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”报错
500 0
|
测试技术 Windows
解决“‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。”的问题
解决“‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。”的问题
1058 0
|
网络协议
“ping”程序知多少
       最近阅读了《TCP/IP详解 卷1:协议》。作者对“TCP/IP协议族”进行了详细的介绍,让读者对因特网上运行的协议有了一个全面的了解。
1007 0
|
6天前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
62 20
|
1月前
|
Linux iOS开发 网络架构
如何使用 Ping 命令监测网络丢包情况?
如何使用 Ping 命令监测网络丢包情况?
172 48
|
1月前
|
Linux iOS开发 MacOS
如何设置 Ping 命令的超时时间?
如何设置 Ping 命令的超时时间?
105 2
|
1月前
|
运维 监控 Linux
别再只会使用简单的 ping 命令了,Linux 中这些高级 ping 命令可以提高工作效率!
在 Linux 系统中,ping 命令不仅用于检测网络连通性和延迟,还拥有多种高级选项和技巧,如定制数据包大小、获取详细统计信息、持续 ping、指定源地址和多目标 ping。本文详细介绍这些高级命令及其在性能测试、故障排查和网络监控中的实际应用,帮助你提升网络管理效率。
130 3
|
1月前
|
Linux 网络安全 Android开发
高级 ping 命令及技巧
Ping命令是一种常用的网络诊断工具,用于测试网络连接的可达性和延迟等信息
83 1

热门文章

最新文章