厚積薄發(fā),豐富的公用類庫(kù)積累,助你高效進(jìn)行系統(tǒng)開(kāi)發(fā)(12)--- 網(wǎng)絡(luò)相關(guān)操作輔助類

俗話說(shuō),一個(gè)好漢十個(gè)幫,眾人拾柴火焰高等都說(shuō)明一個(gè)道理,有更多的資源,更豐富的積累,都是助你走向成功,走向頂峰的推動(dòng)力。

本篇的公用類庫(kù)的介紹主題是程序開(kāi)發(fā)中多線程操作環(huán)境中,常用到的網(wǎng)絡(luò)操作相關(guān)類,本篇隨筆介紹包含郵件發(fā)送輔助類(包含附件、嵌入圖片等)、獲取網(wǎng)頁(yè)數(shù)據(jù)輔助類庫(kù)、管理文檔服務(wù)器類、網(wǎng)絡(luò)相關(guān)操作輔助類、IE代理設(shè)置輔助類等對(duì)象,這些輔助類覆蓋了網(wǎng)絡(luò)編程開(kāi)發(fā)中多數(shù)的應(yīng)用。良好的封裝及操作,給我們提供非常方便、高效的輔助類庫(kù)操作體驗(yàn)。

本篇繼續(xù)繼續(xù)整理優(yōu)化已有的共用類庫(kù),并繼續(xù)發(fā)表隨筆介紹公用類庫(kù)的接口方法以及詳細(xì)使用操作,力求給自己繼續(xù)優(yōu)化,積攢更豐富的公用類庫(kù)資源,加深了解的同時(shí),也給大家展現(xiàn)公用類庫(kù)好的方面。
1、發(fā)送郵件的輔助類 EmailHelper。

實(shí)現(xiàn)效果

  1. 本輔助類主要是用來(lái)方便實(shí)現(xiàn)發(fā)送郵件操作,可以發(fā)送附件、嵌入圖片、HTML等內(nèi)容郵件。使用底層SMTP協(xié)議指令進(jìn)行發(fā)送,成功率較高。

2)郵件發(fā)送可以用在客戶反饋,信息推廣,客戶溝通,員工交流等方面業(yè)務(wù)需要。

實(shí)現(xiàn)代碼

1)輔助類提供的方法源碼如下所示:

/// <summary>    
/// 設(shè)定語(yǔ)言代碼,默認(rèn)設(shè)定為GB2312,如不需要可設(shè)置為""    
/// </summary>
public string Charset = "GB2312";    
   
/// <summary>    
/// 郵箱服務(wù)器    
/// </summary>
public string MailServer    
   
/// <summary>    
/// 郵件服務(wù)器端口號(hào),默認(rèn)端口為25    
/// </summary>
public int MailServerPort    
   
/// <summary>    
/// SMTP認(rèn)證時(shí)使用的用戶名    
/// </summary>
public string MailServerUsername    
   
/// <summary>    
/// SMTP認(rèn)證時(shí)使用的密碼    
/// </summary>
public string MailServerPassword    
   
/// <summary>    
/// 發(fā)件人地址    
/// </summary>
public string From    
   
/// <summary>    
/// 發(fā)件人姓名    
/// </summary>
public string FromName    
   
/// <summary>    
/// 回復(fù)郵件地址    
/// </summary>
public string ReplyTo = "";    
   
/// <summary>    
/// 郵件主題    
/// </summary>
public string Subject = "";    
   
/// <summary>    
/// 是否Html郵件    
/// </summary>
public bool IsHtml = false;    
   
/// <summary>    
/// 收件人是否發(fā)送收條    
/// </summary>
public bool ReturnReceipt = false;    
   
/// <summary>    
/// 郵件正文    
/// </summary>
public string Body = "";    
   
/// <summary>    
/// 郵件發(fā)送優(yōu)先級(jí),可設(shè)置為"High","Normal","Low"或"1","3","5"    
/// </summary>
public string Priority    
   
/// <summary>    
/// 錯(cuò)誤消息反饋    
/// </summary>
public string ErrorMessage    
   
/// <summary>    
/// 收件人姓名    
/// </summary>
public string RecipientName = "";    
   
/// <summary>    
/// 默認(rèn)構(gòu)造函數(shù)    
/// </summary>
public EmailHelper()    
   
/// <summary>    
/// 待郵箱發(fā)送配置參數(shù)的構(gòu)造函數(shù)    
/// </summary>    
/// <param name="mailServer">郵件服務(wù)器</param>    
/// <param name="username">用戶名</param>    
/// <param name="password">用戶密碼</param>
public EmailHelper(string mailServer, string username, string password)     
   
/// <summary>    
/// 待郵箱發(fā)送配置參數(shù)的構(gòu)造函數(shù)    
/// </summary>    
/// <param name="mailServer">郵件服務(wù)器</param>    
/// <param name="username">用戶名</param>    
/// <param name="password">用戶密碼</param>    
/// <param name="mailServerPort">郵箱服務(wù)器端口</param>
public EmailHelper(string mailServer, string username, string password, int port)     
   
 /// <summary>    
/// 添加一個(gè)附件,需使用絕對(duì)路徑    
/// </summary>
public bool AddAttachment(string path)    
        
/// <summary>    
/// 添加一個(gè)收件人    
/// </summary>      
/// <param name="str">收件人地址</param>
public bool AddRecipient(string str)           
   
 /// <summary>    
/// 添加一個(gè)抄送收件人    
/// </summary>    
/// <param name="str">收件人地址</param>
public bool AddRecipientCC(string str)    
        
/// <summary>    
/// 添加一個(gè)密件收件人    
/// </summary>    
/// <param name="str">收件人地址</param>
public bool AddRecipientBCC(string str)    
        
/// <summary>    
/// 清空收件人列表    
/// </summary>
public void ClearRecipient()    
        
/// <summary>    
/// 發(fā)送郵件    
/// </summary>
public bool SendEmail()    

2)輔助類EmailHelper的使用例子代碼如下所示

EmailHelper email = new EmailHelper("smtp.163.com", "wuhuacong2013@163.com", "password");    
email.Subject = "伍華聰?shù)钠胀y(cè)試郵件";    
email.Body = string.Format("測(cè)試郵件正文內(nèi)容");    
email.IsHtml = true;    
email.From = "wuhuacong2013@163.com";    
email.FromName = "wuhuacong2013";    
email.AddRecipient("6966254@qq.com");    
try   
{    
    bool success = email.SendEmail();    
    MessageUtil.ShowTips(success ? "發(fā)送成功" : "發(fā)送失敗");    
}    
catch (Exception ex)    
{    
    MessageUtil.ShowError(ex.Message);    
}  

3)如果使用發(fā)送附件、發(fā)送嵌入圖片(正文中有圖片顯示內(nèi)容的)方式,則例子代碼如下所示。

EmailHelper email = new EmailHelper("smtp.163.com", "wuhuacong2013@163.com", "password");    
email.Subject = "伍華聰?shù)膱D片附件測(cè)試郵件";    
string embedFile = Path.Combine(Application.StartupPath, "cityroad.jpg");    
email.Body = string.Format("測(cè)試郵件正文內(nèi)容<img src=\"{0}\" title='測(cè)試圖片' /> ", embedFile);    
email.IsHtml = true;    
email.From = "wuhuacong2013@163.com";    
email.FromName = "wuhuacong2013";    
email.AddRecipient("6966254@qq.com");    
email.AddAttachment(Path.Combine(Application.StartupPath, "ringin.wav"));//.AddAttachment("C:\\test.txt");    
   
try   
{    
    bool success = email.SendEmail();    
    MessageUtil.ShowTips(success ? "發(fā)送成功" : "發(fā)送失敗");     
}    
catch (Exception ex)    
{    
    MessageUtil.ShowError(ex.Message);    
}  

**2、獲取網(wǎng)頁(yè)數(shù)據(jù)輔助類庫(kù) HttpHelper。 **
實(shí)現(xiàn)效果

  1. 本輔助類主要是用來(lái)方便實(shí)現(xiàn)獲取網(wǎng)頁(yè)數(shù)據(jù)的操作,可以通過(guò)GET、POST方式獲取網(wǎng)頁(yè)內(nèi)容,獲取驗(yàn)證碼等圖片資源,是網(wǎng)絡(luò)編程不可或缺的強(qiáng)大輔助類庫(kù)。
    2) 該輔助類庫(kù)在我的QQ搜通天系列軟件、QQ群成員提取工具、易博搜搜等網(wǎng)絡(luò)應(yīng)用軟件上,輔助類主要是用于網(wǎng)頁(yè)數(shù)據(jù)采集和分析操作。

實(shí)現(xiàn)代碼
1)輔助類提供的方法源碼如下所示:

#region 屬性    
        
/// <summary>    
/// 內(nèi)容類型,默認(rèn)為"application/x-www-form-urlencoded"    
/// </summary>
public string ContentType    
   
/// <summary>    
/// Accept值,默認(rèn)支持各種類型    
/// </summary>
public string Accept    
   
/// <summary>    
/// UserAgent,默認(rèn)支持Mozilla/MSIE等    
/// </summary>
public string UserAgent    
   
/// <summary>    
/// Cookie容器    
/// </summary>
public CookieContainer CookieContainer    
   
/// <summary>    
/// 獲取網(wǎng)頁(yè)源碼時(shí)使用的編碼    
/// </summary>    
/// <value></value>
public Encoding Encoding    
   
/// <summary>    
/// 網(wǎng)絡(luò)延時(shí)    
/// </summary>
public int NetworkDelay    
   
/// <summary>    
/// 最大嘗試次數(shù)    
/// </summary>
public int MaxTry   
  
#endregion   
  
#region 構(gòu)造函數(shù)    
   
/// <summary>    
/// 構(gòu)造函數(shù)    
/// </summary>
public HttpHelper()    
   
/// <summary>    
/// 構(gòu)造函數(shù)    
/// </summary>    
/// <param name="cc">指定CookieContainer的值</param>
public HttpHelper(CookieContainer cc)    
   
/// <summary>    
/// 構(gòu)造函數(shù)    
/// </summary>    
/// <param name="contentType">內(nèi)容類型</param>    
/// <param name="accept">Accept類型</param>    
/// <param name="userAgent">UserAgent內(nèi)容</param>
public HttpHelper(string contentType, string accept, string userAgent)    
   
/// <summary>    
/// 構(gòu)造函數(shù)    
/// </summary>    
/// <param name="cc">指定CookieContainer的值</param>    
/// <param name="contentType">內(nèi)容類型</param>    
/// <param name="accept">Accept類型</param>    
/// <param name="userAgent">UserAgent內(nèi)容</param>
public HttpHelper(CookieContainer cc, string contentType, string accept, string userAgent)   
  
#endregion   
  
#region 公共方法    
                    
/// <summary>    
/// 獲取指定頁(yè)面的HTML代碼    
/// </summary>    
/// <param name="url">指定頁(yè)面的路徑</param>    
/// <param name="cookieContainer">Cookie集合</param>    
/// <param name="postData">回發(fā)的數(shù)據(jù)</param>    
/// <param name="isPost">是否以post方式發(fā)送請(qǐng)求</param>    
/// <returns></returns>
public string GetHtml(string url, CookieContainer cookieContainer, string postData, bool isPost)    
   
/// <summary>    
/// 獲取指定頁(yè)面的HTML代碼    
/// </summary>    
/// <param name="url">指定頁(yè)面的路徑</param>    
/// <param name="cookieContainer">Cookie集合對(duì)象</param>    
/// <param name="postData">回發(fā)的數(shù)據(jù)</param>    
/// <param name="isPost">是否以post方式發(fā)送請(qǐng)求</param>    
/// <param name="referer">頁(yè)面引用</param>    
/// <returns></returns>
public string GetHtml(string url, CookieContainer cookieContainer, string postData, bool isPost, string referer)    
   
/// <summary>    
/// 獲取指定頁(yè)面的HTML代碼    
/// </summary>    
/// <param name="url">指定頁(yè)面的路徑</param>    
/// <param name="cookieContainer">Cookie集合</param>    
/// <param name="reference">頁(yè)面引用</param>    
/// <returns></returns>
public string GetHtml(string url, CookieContainer cookieContainer, string reference)    
   
/// <summary>    
/// 獲取指定頁(yè)面的HTML代碼    
/// </summary>    
/// <param name="url">指定頁(yè)面的路徑</param>    
/// <returns></returns>
public string GetHtml(string url)    
   
/// <summary>    
/// 獲取指定頁(yè)面的HTML代碼    
/// </summary>    
/// <param name="url">指定頁(yè)面的路徑</param>    
/// <param name="reference">頁(yè)面引用</param>    
/// <returns></returns>
public string GetHtml(string url, string reference)    
   
/// <summary>    
/// 獲取指定頁(yè)面的HTML代碼    
/// </summary>    
/// <param name="url">指定頁(yè)面的路徑</param>    
/// <param name="postData">回發(fā)的數(shù)據(jù)</param>    
/// <param name="isPost">是否以post方式發(fā)送請(qǐng)求</param>    
/// <returns></returns>
public string GetHtml(string url, string postData, bool isPost)    
                    
/// <summary>    
/// 獲取指定頁(yè)面的Stream    
/// </summary>    
/// <param name="url">指定頁(yè)面的路徑</param>    
/// <param name="cookieContainer">Cookie集合對(duì)象</param>    
/// <returns></returns>
public Stream GetStream(string url, CookieContainer cookieContainer)    
   
/// <summary>    
/// 獲取指定頁(yè)面的Stream    
/// </summary>    
/// <param name="url">指定頁(yè)面的路徑</param>    
/// <param name="cookieContainer">Cookie對(duì)象</param>    
/// <param name="reference">頁(yè)面引用</param>
public Stream GetStream(string url, CookieContainer cookieContainer, string reference)    
   
/// <summary>    
/// 根據(jù)Cookie字符串獲取Cookie的集合    
/// </summary>    
/// <param name="cookieString">Cookie字符串</param>    
/// <returns></returns>
public CookieCollection GetCookieCollection(string cookieString)    
   
/// <summary>    
/// 獲取HTML頁(yè)面內(nèi)容指定隱藏域Key的Value內(nèi)容    
/// </summary>    
/// <param name="html">待操作的HTML頁(yè)面內(nèi)容</param>    
/// <param name="key">隱藏域的名稱</param>    
/// <returns></returns>
public string GetHiddenKeyValue(string html, string key)    
   
/// <summary>    
/// 獲取網(wǎng)頁(yè)的編碼格式    
/// </summary>    
/// <param name="url">網(wǎng)頁(yè)地址</param>    
/// <returns></returns>
public string GetEncoding(string url)    
   
/// <summary>    
/// 判斷URL是否有效    
/// </summary>    
/// <param name="url">待判斷的URL,可以是網(wǎng)頁(yè)以及圖片鏈接等</param>    
/// <returns>200為正確,其余為大致網(wǎng)頁(yè)錯(cuò)誤代碼</returns>
public int GetUrlError(string url)    
   
/// <summary>    
/// 移除Html標(biāo)記    
/// </summary>
public string RemoveHtml(string content)    
   
/// <summary>    
/// 返回 HTML 字符串的編碼結(jié)果    
/// </summary>    
/// <param name="inputData">字符串</param>    
/// <returns>編碼結(jié)果</returns>
public static string HtmlEncode(string inputData)    
   
/// <summary>    
/// 返回 HTML 字符串的解碼結(jié)果    
/// </summary>    
/// <param name="str">字符串</param>    
/// <returns>解碼結(jié)果</returns>
public static string HtmlDecode(string str)   
  
#endregion  

2)輔助類HttpHelper的使用例子代碼如下所示,下面的是最為簡(jiǎn)單的獲取頁(yè)面內(nèi)容的操作。

public void GetQQLog()    
{    
    string qq = this.txtQQ.Text;    
    string json = "";    
   
    string url = string.Format("http://b.qzone.qq.com/cgi-bin/blognew/blog_get_titlelist?direct=1&numperpage=100&uin={0}", qq);    
    HttpHelper helper = new HttpHelper();    
    helper.Encoding = Encoding.Default;    
    json = helper.GetHtml(url);    
    ..............    
}  

實(shí)際操作可能更多的是要記錄Cookie信息,方便下一次的調(diào)用,還有可能需要獲取驗(yàn)證碼等等,復(fù)雜一點(diǎn)的例子代碼如下所示。

string uin = e.Argument.ToString();                
HttpHelper httpHelper = new HttpHelper();    
string refUrl = "http://qzone.qq.com/";    
string url = string.Format("http://ptlogin2.qq.com/check?uin={0}&appid=46000101&r=0.5454333601416937", uin);    
string checkHtml = httpHelper.GetHtml(url, Portal.gc.cookieZone, refUrl);    
//ptui_checkVC('1','56443c908b8be83dc4435e253e6b43ad99eab4fe0846930d');    
Regex re = new Regex("ptui_checkVC\\('\\d+','(.*?)'\\);", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);    
Match mc = re.Match(checkHtml);    
if (!mc.Success)    
{    
    return;    
}    
   
string vc_type = re.Matches(checkHtml)[0].Groups[1].Value;    
string imageUrl = string.Format("http://captcha.qq.com/getimage?aid=46000101&r=0.2758570793854393&uin={0}&vc_type={1}", uin, vc_type);    
using (Stream s = httpHelper.GetStream(imageUrl, Portal.gc.cookieZone))    
{    
    if (s == null)    
    {    
        MessageExUtil.ShowWarning("獲取登陸碼錯(cuò)誤,請(qǐng)檢查您的網(wǎng)絡(luò)!");    
        return;    
    }    
    e.Result = Image.FromStream(s);    
}  

上面的操作都是使用GET方式獲取頁(yè)面內(nèi)容或者數(shù)據(jù)的,另外還有一種方式就是使用POST方式提交數(shù)據(jù),并獲取頁(yè)面內(nèi)容的,如下例子所示。

#region 構(gòu)造提交參數(shù)    
StringBuilder sb = new StringBuilder();    
sb.AppendFormat("callCount=1");    
sb.AppendFormat("&page=/{0}/members/", urlName);    
sb.AppendFormat("&httpSessionId=");    
sb.AppendFormat("&scriptSessionId=D4DAC4AD9C3BF9B71C82802BDDBA0C25369");    
sb.AppendFormat("&c0-scriptName=CircleBean");    
sb.AppendFormat("&c0-methodName=getNewCircleUsers");    
sb.AppendFormat("&c0-id=0");//保留字符    
sb.AppendFormat("&c0-param0=number:{0}", circleId);//11    
sb.AppendFormat("&c0-param1=number:{0}", pageSize);//數(shù)量    
sb.AppendFormat("&c0-param2=number:{0}", pageSize * i);//0,30,60    
sb.AppendFormat("&c0-param3=boolean:true");    
sb.AppendFormat("&batchId={0}", i);    
i++;    
   
//callCount=1    
//page=/dnkxin/members/    
//httpSessionId=    
//scriptSessionId=D4DAC4AD9C3BF9B71C82802BDDBA0C25369    
//c0-scriptName=CircleBean    
//c0-methodName=getNewCircleUsers    
//c0-id=0    
//c0-param0=number:15057111            //(<body onload="MembersPage.init('15057111', '/style/pinkstar/','http://blog.163.com','')">)    
//c0-param1=number:10    
//c0-param2=number:0    
//c0-param3=boolean:true    
//batchId=0   
#endregion    
   
string content = "";    
try   
{    
    httpHelper.ContentType = "text/plain";    
    content = httpHelper.GetHtml(url, cookie, sb.ToString(), true, refUrl);//使用Post方式提交內(nèi)容,并返回頁(yè)面結(jié)果    
    re = new Regex(circleReg.ToString(), RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);    
    mc = re.Match(content);    
}    
catch (Exception ex)    
{    
    LogTextHelper.WriteLine(ex.ToString());    
    break;    
}  

下面是一些具體應(yīng)用的例子截圖,主要就是通過(guò)該輔助類獲取、分析網(wǎng)頁(yè)的處理結(jié)果。



**3、管理文檔服務(wù)器類,提供文件上傳、下載、刪除等功能輔助類 FileServerManage。 **
實(shí)現(xiàn)效果

  1. 本輔助類主要是用來(lái)方便實(shí)現(xiàn)管理文檔服務(wù)器類,提供文件上傳、下載、刪除等功能。 不過(guò)注意,由于IIS操作限制,可能一些后綴名的文件不支持訪問(wèn)。
    2)FileServerManage 主要是通過(guò)IIS網(wǎng)站方式上傳管理文件附件的,要使用該輔助類庫(kù)的功能,需要為指定的目錄(一般在文件服務(wù)器上一個(gè)目錄)建立一個(gè)虛擬網(wǎng)站,指定端口等參數(shù),該輔助類庫(kù)的構(gòu)造函數(shù),使用的是虛擬網(wǎng)站的URL地址以及文件服務(wù)器的登錄賬號(hào)和密碼(本機(jī)則使用本機(jī)的賬號(hào)密碼)。 3)另外使用IIS作為文件上傳操作,除了需要用到當(dāng)前機(jī)器的賬號(hào)密碼登錄外,還需要在IIS管理中開(kāi)通/啟用WebDev的功能。

實(shí)現(xiàn)代碼
1)輔助類提供的方法源碼如下所示:

/// <summary>    
/// 構(gòu)造函數(shù)    
/// </summary>
public FileServerManage()    
   
/// <summary>    
/// 構(gòu)造函數(shù)    
/// </summary>    
/// <param name="url">指定URL地址</param>    
/// <param name="username">指定用戶名</param>    
/// <param name="password">指定密碼</param>
public FileServerManage(string url, string username, string password)    
   
/// <summary>    
/// 上傳文件    
/// </summary>    
/// <param name="inputStream">流對(duì)象</param>    
/// <param name="fileName">保存文件名,可包含文件夾(test/test.txt)</param>    
/// <returns>bool[true:成功,false:失敗]</returns>
public bool UploadFile(Stream inputStream, string fileName)    
   
/// <summary>    
/// 上傳文件    
/// </summary>    
/// <param name="fileUrl">上傳地址</param>    
/// <param name="fileName">上傳文件名稱,可包含文件夾(test/test.txt)</param>    
/// <returns>bool[true:成功,false:失敗]</returns>
public bool UploadFile(string fileUrl, string fileName)    
   
/// <summary>    
/// 刪除文件    
/// </summary>    
/// <param name="fileName">文件名稱,可包含文件夾(test/test.txt)</param>    
/// <returns>bool[true:成功,false:失敗]</returns>
public bool DeleteFile(string fileName)    
   
/// <summary>    
/// 判斷文件是否存在    
/// </summary>    
/// <param name="fileName">文件名稱,可包含文件夾(test/test.txt)</param>    
/// <returns>bool[true:存在,false:否]</returns>
public bool IsFileExist(string fileName)    
   
/// <summary>    
/// 通過(guò)HttpResponse方式讀取文件,Web開(kāi)發(fā)才可以使用    
/// </summary>    
/// <param name="newFileName">新文件名稱,可包含文件夾(test/test.txt)</param>    
/// <param name="oldFileName">原文件名稱</param>    
/// <returns></returns>
public string ReadFile(string newFileName, string oldFileName)    
   
/// <summary>    
/// 讀取服務(wù)器文件到字節(jié)數(shù)據(jù)中    
/// </summary>    
/// <param name="fileName">文件名稱,可包含文件夾(test/test.txt)</param>    
/// <returns></returns>
public byte[] ReadFileBytes(string fileName)   

2)輔助類FileServerManage的使用例子代碼如下所示

private void btnWebFile_Click(object sender, EventArgs e)    
{    
    WHC.OrderWater.Commons.Web.FileServerManage file = new WHC.OrderWater.Commons.Web.FileServerManage("http://192.168.1.30:8009", "administrator", "123456789");    
    try   
    {    
        //上傳文件    
        bool first = false;    
        using (FileStream fs = new FileStream("C:\\test.txt", FileMode.Open))    
        {    
            first = file.UploadFile(fs, "test.txt");    
        }    
   
        //利用子目錄上傳,需要服務(wù)器手動(dòng)創(chuàng)建目錄    
        bool second = file.UploadFile("C:\\test.txt", "Bridge/test.txt");    
   
        MessageUtil.ShowTips(string.Format("第一次上傳:{0} 第二次上傳{1}", first, second));    
            
        byte[] fileBytes = file.ReadFileBytes("test.txt");    
        if (fileBytes != null)    
        {    
            MessageUtil.ShowTips(string.Format("File Bytes:{0}", fileBytes.Length));    
        }    
   
        //刪除文件    
        first = file.DeleteFile("test.txt");    
        bool third = file.IsFileExist("Bridge/test.txt");    
        second = file.DeleteFile("Bridge/test.txt");     
        MessageUtil.ShowTips(string.Format("刪除文件:{0}、{1} 文件存在:{2}", first, second, third));    
            
    }    
    catch (Exception ex)    
    {    
        MessageUtil.ShowError(ex.Message);    
    }    
}  

**4、網(wǎng)絡(luò)相關(guān)操作輔助類 NetworkUtil **
實(shí)現(xiàn)效果

  1. 本輔助類主要是用來(lái)方便實(shí)現(xiàn)網(wǎng)絡(luò)相關(guān)操作,可以對(duì)IP或者域名進(jìn)行相互解析,基于Socket的TCP/UDP相關(guān)操作,檢測(cè)本機(jī)是否聯(lián)網(wǎng)等相關(guān)的網(wǎng)絡(luò)操作。
    實(shí)現(xiàn)代碼
    1)輔助類提供的方法源碼如下所示:
/// <summary>    
/// 獲取本地機(jī)器IP地址    
/// </summary>    
/// <returns></returns>
public static string GetLocalIP()    
   
/// <summary>    
/// 檢查設(shè)置的IP地址是否正確,并返回正確的IP地址,無(wú)效IP地址返回"-1"。    
/// </summary>    
/// <param name="ip">設(shè)置的IP地址</param>    
/// <returns>非法IP 則返回 -1 </returns>
public static string GetValidIP(string ip)    
   
/// <summary>    
/// 檢查設(shè)置的端口號(hào)是否正確,并返回正確的端口號(hào),無(wú)效端口號(hào)返回-1。    
/// </summary>    
/// <param name="port">設(shè)置的端口號(hào)</param>
public static int GetValidPort(string port)    
   
/// <summary>    
/// 將字符串形式的IP地址轉(zhuǎn)換成IPAddress對(duì)象    
/// </summary>    
/// <param name="ip">字符串形式的IP地址</param>
public static IPAddress StringToIPAddress(string ip)    
   
/// <summary>    
/// 獲取本機(jī)的計(jì)算機(jī)名    
/// </summary>
public static string LocalHostName    
   
/// <summary>    
/// 獲取本機(jī)的局域網(wǎng)IP    
/// </summary>
public static string LANIP    
   
/// <summary>    
/// 獲取本機(jī)在Internet網(wǎng)絡(luò)的廣域網(wǎng)IP    
/// </summary>
public static string WANIP    
   
/// <summary>    
/// 獲取遠(yuǎn)程客戶機(jī)的IP地址    
/// </summary>    
/// <param name="clientSocket">客戶端的socket對(duì)象</param>
public static string GetClientIP(Socket clientSocket)    
   
/// <summary>    
/// 創(chuàng)建一個(gè)IPEndPoint對(duì)象    
/// </summary>    
/// <param name="ip">IP地址</param>    
/// <param name="port">端口號(hào)</param>
public static IPEndPoint CreateIPEndPoint(string ip, int port)    
   
/// <summary>    
/// 創(chuàng)建一個(gè)自動(dòng)分配IP和端口的TcpListener對(duì)象    
/// </summary>
public static TcpListener CreateTcpListener()    
   
/// <summary>    
/// 創(chuàng)建一個(gè)TcpListener對(duì)象    
/// </summary>    
/// <param name="ip">IP地址</param>    
/// <param name="port">端口</param>
public static TcpListener CreateTcpListener(string ip, int port)    
   
/// <summary>    
/// 創(chuàng)建一個(gè)基于TCP協(xié)議的Socket對(duì)象    
/// </summary>
public static Socket CreateTcpSocket()    
   
/// <summary>    
/// 創(chuàng)建一個(gè)基于UDP協(xié)議的Socket對(duì)象    
/// </summary>
public static Socket CreateUdpSocket()   
  
#region 獲取TcpListener對(duì)象的本地終結(jié)點(diǎn)    
/// <summary>    
/// 獲取TcpListener對(duì)象的本地終結(jié)點(diǎn)    
/// </summary>    
/// <param name="tcpListener">TcpListener對(duì)象</param>
public static IPEndPoint GetLocalPoint(TcpListener tcpListener)    
   
/// <summary>    
/// 獲取TcpListener對(duì)象的本地終結(jié)點(diǎn)的IP地址    
/// </summary>    
/// <param name="tcpListener">TcpListener對(duì)象</param>
public static string GetLocalPoint_IP(TcpListener tcpListener)    
   
/// <summary>    
/// 獲取TcpListener對(duì)象的本地終結(jié)點(diǎn)的端口號(hào)    
/// </summary>    
/// <param name="tcpListener">TcpListener對(duì)象</param>
public static int GetLocalPoint_Port(TcpListener tcpListener)   
  
#endregion   
  
#region 獲取Socket對(duì)象的本地終結(jié)點(diǎn)    
        
/// <summary>    
/// 獲取Socket對(duì)象的本地終結(jié)點(diǎn)    
/// </summary>    
/// <param name="socket">Socket對(duì)象</param>
public static IPEndPoint GetLocalPoint(Socket socket)    
   
/// <summary>    
/// 獲取Socket對(duì)象的本地終結(jié)點(diǎn)的IP地址    
/// </summary>    
/// <param name="socket">Socket對(duì)象</param>
public static string GetLocalPoint_IP(Socket socket)    
   
/// <summary>    
/// 獲取Socket對(duì)象的本地終結(jié)點(diǎn)的端口號(hào)    
/// </summary>    
/// <param name="socket">Socket對(duì)象</param>
public static int GetLocalPoint_Port(Socket socket)   
  
#endregion    
   
/// <summary>    
/// 綁定終結(jié)點(diǎn)    
/// </summary>    
/// <param name="socket">Socket對(duì)象</param>    
/// <param name="endPoint">要綁定的終結(jié)點(diǎn)</param>
public static void BindEndPoint(Socket socket, IPEndPoint endPoint)    
   
/// <summary>    
/// 綁定終結(jié)點(diǎn)    
/// </summary>    
/// <param name="socket">Socket對(duì)象</param>            
/// <param name="ip">服務(wù)器IP地址</param>    
/// <param name="port">服務(wù)器端口</param>
public static void BindEndPoint(Socket socket, string ip, int port)    
   
/// <summary>    
/// 指定Socket對(duì)象執(zhí)行監(jiān)聽(tīng),默認(rèn)允許的最大掛起連接數(shù)為100    
/// </summary>    
/// <param name="socket">執(zhí)行監(jiān)聽(tīng)的Socket對(duì)象</param>    
/// <param name="port">監(jiān)聽(tīng)的端口號(hào)</param>
public static void StartListen(Socket socket, int port)    
   
/// <summary>    
/// 指定Socket對(duì)象執(zhí)行監(jiān)聽(tīng)    
/// </summary>    
/// <param name="socket">執(zhí)行監(jiān)聽(tīng)的Socket對(duì)象</param>    
/// <param name="port">監(jiān)聽(tīng)的端口號(hào)</param>    
/// <param name="maxConnection">允許的最大掛起連接數(shù)</param>
public static void StartListen(Socket socket, int port, int maxConnection)    
   
/// <summary>    
/// 指定Socket對(duì)象執(zhí)行監(jiān)聽(tīng)    
/// </summary>    
/// <param name="socket">執(zhí)行監(jiān)聽(tīng)的Socket對(duì)象</param>    
/// <param name="ip">監(jiān)聽(tīng)的IP地址</param>    
/// <param name="port">監(jiān)聽(tīng)的端口號(hào)</param>    
/// <param name="maxConnection">允許的最大掛起連接數(shù)</param>
public static void StartListen(Socket socket, string ip, int port, int maxConnection)    
   
/// <summary>    
/// 連接到基于TCP協(xié)議的服務(wù)器,連接成功返回true,否則返回false    
/// </summary>    
/// <param name="socket">Socket對(duì)象</param>    
/// <param name="ip">服務(wù)器IP地址</param>    
/// <param name="port">服務(wù)器端口號(hào)</param>
public static bool Connect(Socket socket, string ip, int port)    
   
/// <summary>    
/// 以同步方式向指定的Socket對(duì)象發(fā)送消息    
/// </summary>    
/// <param name="socket">socket對(duì)象</param>    
/// <param name="msg">發(fā)送的消息</param>
public static void SendMsg(Socket socket, byte[] msg)    
   
/// <summary>    
/// 使用UTF8編碼格式以同步方式向指定的Socket對(duì)象發(fā)送消息    
/// </summary>    
/// <param name="socket">socket對(duì)象</param>    
/// <param name="msg">發(fā)送的消息</param>
public static void SendMsg(Socket socket, string msg)    
   
/// <summary>    
/// 以同步方式接收消息    
/// </summary>    
/// <param name="socket">socket對(duì)象</param>    
/// <param name="buffer">接收消息的緩沖區(qū)</param>
public static void ReceiveMsg(Socket socket, byte[] buffer)    
   
/// <summary>    
/// 以同步方式接收消息,并轉(zhuǎn)換為UTF8編碼格式的字符串,使用5000字節(jié)的默認(rèn)緩沖區(qū)接收。    
/// </summary>    
/// <param name="socket">socket對(duì)象</param>
public static string ReceiveMsg(Socket socket)    
   
/// <summary>    
/// 關(guān)閉基于Tcp協(xié)議的Socket對(duì)象    
/// </summary>    
/// <param name="socket">要關(guān)閉的Socket對(duì)象</param>
public static void Close(Socket socket)    
   
   
/// <summary>    
/// 檢測(cè)本機(jī)是否聯(lián)網(wǎng)    
/// </summary>    
/// <returns></returns>
public static bool IsConnectedInternet()    
   
/// <summary>    
/// 檢測(cè)本機(jī)是否聯(lián)網(wǎng)的連接屬性    
/// </summary>
public static InternetConnectionStatesType CurrentState    
   
/// <summary>    
/// 檢測(cè)本機(jī)是否聯(lián)網(wǎng)(互聯(lián)網(wǎng))    
/// </summary>    
/// <returns></returns>
public static bool IsOnline()    
   
/// <summary>    
/// 轉(zhuǎn)換主機(jī)域名DNS到IP地址    
/// </summary>    
/// <param name="hostname">主機(jī)域名DNS</param>    
/// <returns></returns>
public static string ConvertDnsToIp(string hostname)    
   
/// <summary>    
/// 轉(zhuǎn)換主機(jī)IP地址到DNS域名    
/// </summary>    
/// <param name="ipAddress">主機(jī)IP地址</param>    
/// <returns></returns>
public static string ConvertIpToDns(string ipAddress)    
   
/// <summary>    
/// 根據(jù)IP端點(diǎn)獲取主機(jī)名稱    
/// </summary>    
/// <param name="ipEndPoint">IP端點(diǎn)</param>    
/// <returns></returns>
public static string GetHostName(IPEndPoint ipEndPoint)    
   
/// <summary>    
/// 根據(jù)主機(jī)IP地址對(duì)象獲取主機(jī)名稱    
/// </summary>    
/// <param name="ip">主機(jī)IP地址對(duì)象</param>    
/// <returns></returns>
public static string GetHostName(IPAddress ip)    
   
/// <summary>    
/// 根據(jù)主機(jī)IP獲取主機(jī)名稱    
/// </summary>    
/// <param name="hostIP">主機(jī)IP</param>    
/// <returns></returns>
public static string GetHostName(string hostIP)    
   
/// <summary>    
/// 得到一臺(tái)機(jī)器的EndPoint端點(diǎn)    
/// </summary>    
/// <param name="entry">主機(jī)實(shí)體</param>    
/// <returns></returns>
public static EndPoint GetNetworkAddressEndPoing(IPHostEntry entry)    
   
/// <summary>    
/// 主機(jī)名是否存在    
/// </summary>    
/// <param name="host">主機(jī)名</param>    
/// <returns></returns>
public static bool IsHostAvailable(string host)    
   
   
/// <summary>    
/// 在主機(jī)名解析到一個(gè)IP主機(jī)實(shí)體    
/// </summary>    
/// <param name="hostname">主機(jī)名</param>    
/// <returns></returns>
public static IPHostEntry ResolveHost(string host) 

2)輔助類NetworkUtil的使用例子代碼如下所示。

private void btnNetWork_Click(object sender, EventArgs e)    
{    
    StringBuilder sb = new StringBuilder();    
    sb.AppendFormat("本機(jī)IP:{0} \r\n", NetworkUtil.GetLocalIP());    
    sb.AppendFormat("檢測(cè)本機(jī)是否聯(lián)網(wǎng):{0} \r\n", NetworkUtil.IsConnectedInternet());    
    sb.AppendFormat("www.iqid.com域名IP:{0} \r\n", NetworkUtil.ConvertDnsToIp("www.iqidi.com"));    
    sb.AppendFormat("本機(jī)LocalHostName:{0}  \r\n", NetworkUtil.LocalHostName);    
    sb.AppendFormat("本機(jī)局域網(wǎng)IP:{0}  \r\n", NetworkUtil.LANIP);    
    sb.AppendFormat("本機(jī)廣域網(wǎng)IP:{0}  \r\n", NetworkUtil.WANIP);    
   
    Socket socket = NetworkUtil.CreateTcpSocket();    
    Socket udpsocket = NetworkUtil.CreateUdpSocket();    
    TcpListener listen = NetworkUtil.CreateTcpListener("127.0.0.1", 9900);    
    listen.Start(100);    
   
    MessageUtil.ShowTips(sb.ToString());    
}  

**5、IE代理設(shè)置輔助類 ProxyHelper。 **
實(shí)現(xiàn)效果

  1. 本輔助類主要是用來(lái)方便實(shí)現(xiàn)IE代理設(shè)置操作。
    實(shí)現(xiàn)代碼
    1)輔助類提供的方法源碼如下所示:
/// <summary>    
/// IE代理設(shè)置輔助類    
/// </summary>
public class ProxyHelper    
{   
    #region IE代理設(shè)置    
   
    /// <summary>    
    /// 讓IE支持WAP    
    /// </summary>
    public static void SetIESupportWap()    
   
    /// <summary>    
    /// 設(shè)置代理    
    /// </summary>    
    /// <param name="ProxyServer">代理服務(wù)器</param>    
    /// <param name="EnableProxy">設(shè)置代理可用</param>    
    /// <returns></returns>
    public static string SetIEProxy(string ProxyServer, int EnableProxy)   
       
  
    #endregion   
  
    #region 其他操作    
   
    /// <summary>    
    /// 測(cè)試代理配置    
    /// </summary>    
    /// <param name="setting">代理信息</param>    
    /// <param name="te">測(cè)試信息</param>
    public static bool TestProxy(ProxySettingEntity setting, TestEntity te)    
   
    /// <summary>    
    /// 代理設(shè)置    
    /// </summary>    
    /// <param name="request">Web請(qǐng)求</param>    
    /// <param name="Proxy">代理設(shè)置</param>
    public static void SetProxySetting(WebRequest request, ProxySettingEntity Proxy)   
  
    #endregion    
}    
   
/// <summary>    
/// 測(cè)試信息    
/// </summary>
[Serializable]    
public class TestEntity    
{    
    /// <summary>    
    /// 測(cè)試網(wǎng)站地址    
    /// </summary>
    public string TestUrl    
   
    /// <summary>    
    /// 測(cè)試網(wǎng)站Title    
    /// </summary>
    public string TestWebTitle    
   
    /// <summary>    
    /// Web編碼    
    /// </summary>
    public string TestWebEncoding    
}    
   
/// <summary>    
/// 代理設(shè)置    
/// </summary>
[Serializable]    
public class ProxySettingEntity    
{    
    /// <summary>    
    /// 編號(hào)    
    /// </summary>
    public int Id    
   
    /// <summary>    
    /// 代理服務(wù)器IP    
    /// </summary>
    public string Ip    
   
    /// <summary>    
    /// 代理服務(wù)器端口    
    /// </summary>
    public int Port    
   
    /// <summary>    
    /// 代理用戶名    
    /// </summary>
    public string UserName    
   
    /// <summary>    
    /// 代理密碼    
    /// </summary>
    public string Password    
   
    /// <summary>    
    /// 代理類型    
    /// </summary>
    public int ProxyType    
}  

2)輔助類ProxyHelper的使用例子代碼如下所示

CHM幫助文檔持續(xù)更新中,統(tǒng)一下載地址是: http://www.iqidi.com/download/commonshelp.rar
公用類庫(kù)DLL+XML注釋文件下載地址是:http://files.cnblogs.com/wuhuacong/WHC.OrderWater.Commons.rar

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容