俗話說(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)效果
- 本輔助類主要是用來(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)效果
- 本輔助類主要是用來(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)效果
- 本輔助類主要是用來(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)效果
- 本輔助類主要是用來(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)效果
- 本輔助類主要是用來(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