厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(12)--- 網絡相關操作輔助類


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

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

本篇繼續繼續整理優化已有的共用類庫,並繼續發表隨筆介紹公用類庫的接口方法以及詳細使用操作,力求給自己繼續優化,積攢更豐富的公用類庫資源,加深了解的同時,也給大家展現公用類庫好的方面。

厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(11)---各種線程相關操作類
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(10)---各種線程同步的集合類
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(9)----各種常用輔助類
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(8)----非對稱加密、BASE64加密、MD5等常用加密處理
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(7)-----聲音播放、硬件信息、鍵盤模擬及鈎子、鼠標模擬及鈎子等設備相關 
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(6)----全屏截圖、圖標獲取、圖片打印、頁面預覽截屏、圖片復雜操作等
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(5)----熱鍵、多線程、窗體動畫凍結等窗體操作
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(4)----CSV、Excel、INI文件、獨立存儲等文件相關
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(3)----數據庫相關操作
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(2)----常用操作
厚積薄發,豐富的公用類庫積累,助你高效進行系統開發(1)----開篇總結

1、發送郵件的輔助類 EmailHelper。  

實現效果

1)  本輔助類主要是用來方便實現發送郵件操作,可以發送附件、嵌入圖片、HTML等內容郵件。使用底層SMTP協議指令進行發送,成功率較高。 

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

 

實現代碼

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

/// <summary>    
/// 設定語言代碼,默認設定為GB2312,如不需要可設置為""
/// </summary>
public string Charset = "GB2312";

/// <summary>
/// 郵箱服務器
/// </summary>
public string MailServer

/// <summary>
/// 郵件服務器端口號,默認端口為25
/// </summary>
public int MailServerPort

/// <summary>
/// SMTP認證時使用的用戶名
/// </summary>
public string MailServerUsername

/// <summary>
/// SMTP認證時使用的密碼
/// </summary>
public string MailServerPassword

/// <summary>
/// 發件人地址
/// </summary>
public string From

/// <summary>
/// 發件人姓名
/// </summary>
public string FromName

/// <summary>
/// 回復郵件地址
/// </summary>
public string ReplyTo = "";

/// <summary>
/// 郵件主題
/// </summary>
public string Subject = "";

/// <summary>
/// 是否Html郵件
/// </summary>
public bool IsHtml = false;

/// <summary>
/// 收件人是否發送收條
/// </summary>
public bool ReturnReceipt = false;

/// <summary>
/// 郵件正文
/// </summary>
public string Body = "";

/// <summary>
/// 郵件發送優先級,可設置為"High","Normal","Low"或"1","3","5"
/// </summary>
public string Priority

/// <summary>
/// 錯誤消息反饋
/// </summary>
public string ErrorMessage

/// <summary>
/// 收件人姓名
/// </summary>
public string RecipientName = "";

/// <summary>
/// 默認構造函數
/// </summary>
public EmailHelper()

/// <summary>
/// 待郵箱發送配置參數的構造函數
/// </summary>
/// <param name="mailServer">郵件服務器</param>
/// <param name="username">用戶名</param>
/// <param name="password">用戶密碼</param>
public EmailHelper(string mailServer, string username, string password)

/// <summary>
/// 待郵箱發送配置參數的構造函數
/// </summary>
/// <param name="mailServer">郵件服務器</param>
/// <param name="username">用戶名</param>
/// <param name="password">用戶密碼</param>
/// <param name="mailServerPort">郵箱服務器端口</param>
public EmailHelper(string mailServer, string username, string password, int port)

/// <summary>
/// 添加一個附件,需使用絕對路徑
/// </summary>
public bool AddAttachment(string path)

/// <summary>
/// 添加一個收件人
/// </summary>
/// <param name="str">收件人地址</param>
public bool AddRecipient(string str)

/// <summary>
/// 添加一個抄送收件人
/// </summary>
/// <param name="str">收件人地址</param>
public bool AddRecipientCC(string str)

/// <summary>
/// 添加一個密件收件人
/// </summary>
/// <param name="str">收件人地址</param>
public bool AddRecipientBCC(string str)

/// <summary>
/// 清空收件人列表
/// </summary>
public void ClearRecipient()

/// <summary>
/// 發送郵件
/// </summary>
public bool SendEmail()

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

EmailHelper email = new EmailHelper("smtp.163.com", "wuhuacong2013@163.com", "password");    
email.Subject = "伍華聰的普通測試郵件";
email.Body = string.Format("測試郵件正文內容");
email.IsHtml = true;
email.From = "wuhuacong2013@163.com";
email.FromName = "wuhuacong2013";
email.AddRecipient("6966254@qq.com");
try
{
bool success = email.SendEmail();
MessageUtil.ShowTips(success ? "發送成功" : "發送失敗");
}
catch (Exception ex)
{
MessageUtil.ShowError(ex.Message);
}

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

EmailHelper email = new EmailHelper("smtp.163.com", "wuhuacong2013@163.com", "password");    
email.Subject = "伍華聰的圖片附件測試郵件";
string embedFile = Path.Combine(Application.StartupPath, "cityroad.jpg");
email.Body = string.Format("測試郵件正文內容<img src=\"{0}\" title='測試圖片' /> ", 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 ? "發送成功" : "發送失敗");
}
catch (Exception ex)
{
MessageUtil.ShowError(ex.Message);
}

 

2、獲取網頁數據輔助類庫 HttpHelper。  

實現效果

1)  本輔助類主要是用來方便實現獲取網頁數據的操作,可以通過GET、POST方式獲取網頁內容,獲取驗證碼等圖片資源,是網絡編程不可或缺的強大輔助類庫。 

2) 該輔助類庫在我的QQ搜通天系列軟件、QQ群成員提取工具、易博搜搜等網絡應用軟件上,輔助類主要是用於網頁數據采集和分析操作。

 

實現代碼

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

 

#region 屬性    

/// <summary>
/// 內容類型,默認為"application/x-www-form-urlencoded"
/// </summary>
public string ContentType

/// <summary>
/// Accept值,默認支持各種類型
/// </summary>
public string Accept

/// <summary>
/// UserAgent,默認支持Mozilla/MSIE等
/// </summary>
public string UserAgent

/// <summary>
/// Cookie容器
/// </summary>
public CookieContainer CookieContainer

/// <summary>
/// 獲取網頁源碼時使用的編碼
/// </summary>
/// <value></value>
public Encoding Encoding

/// <summary>
/// 網絡延時
/// </summary>
public int NetworkDelay

/// <summary>
/// 最大嘗試次數
/// </summary>
public int MaxTry

#endregion

#region 構造函數

/// <summary>
/// 構造函數
/// </summary>
public HttpHelper()

/// <summary>
/// 構造函數
/// </summary>
/// <param name="cc">指定CookieContainer的值</param>
public HttpHelper(CookieContainer cc)

/// <summary>
/// 構造函數
/// </summary>
/// <param name="contentType">內容類型</param>
/// <param name="accept">Accept類型</param>
/// <param name="userAgent">UserAgent內容</param>
public HttpHelper(string contentType, string accept, string userAgent)

/// <summary>
/// 構造函數
/// </summary>
/// <param name="cc">指定CookieContainer的值</param>
/// <param name="contentType">內容類型</param>
/// <param name="accept">Accept類型</param>
/// <param name="userAgent">UserAgent內容</param>
public HttpHelper(CookieContainer cc, string contentType, string accept, string userAgent)

#endregion

#region 公共方法

/// <summary>
/// 獲取指定頁面的HTML代碼
/// </summary>
/// <param name="url">指定頁面的路徑</param>
/// <param name="cookieContainer">Cookie集合</param>
/// <param name="postData">回發的數據</param>
/// <param name="isPost">是否以post方式發送請求</param>
/// <returns></returns>
public string GetHtml(string url, CookieContainer cookieContainer, string postData, bool isPost)

/// <summary>
/// 獲取指定頁面的HTML代碼
/// </summary>
/// <param name="url">指定頁面的路徑</param>
/// <param name="cookieContainer">Cookie集合對象</param>
/// <param name="postData">回發的數據</param>
/// <param name="isPost">是否以post方式發送請求</param>
/// <param name="referer">頁面引用</param>
/// <returns></returns>
public string GetHtml(string url, CookieContainer cookieContainer, string postData, bool isPost, string referer)

/// <summary>
/// 獲取指定頁面的HTML代碼
/// </summary>
/// <param name="url">指定頁面的路徑</param>
/// <param name="cookieContainer">Cookie集合</param>
/// <param name="reference">頁面引用</param>
/// <returns></returns>
public string GetHtml(string url, CookieContainer cookieContainer, string reference)

/// <summary>
/// 獲取指定頁面的HTML代碼
/// </summary>
/// <param name="url">指定頁面的路徑</param>
/// <returns></returns>
public string GetHtml(string url)

/// <summary>
/// 獲取指定頁面的HTML代碼
/// </summary>
/// <param name="url">指定頁面的路徑</param>
/// <param name="reference">頁面引用</param>
/// <returns></returns>
public string GetHtml(string url, string reference)

/// <summary>
/// 獲取指定頁面的HTML代碼
/// </summary>
/// <param name="url">指定頁面的路徑</param>
/// <param name="postData">回發的數據</param>
/// <param name="isPost">是否以post方式發送請求</param>
/// <returns></returns>
public string GetHtml(string url, string postData, bool isPost)

/// <summary>
/// 獲取指定頁面的Stream
/// </summary>
/// <param name="url">指定頁面的路徑</param>
/// <param name="cookieContainer">Cookie集合對象</param>
/// <returns></returns>
public Stream GetStream(string url, CookieContainer cookieContainer)

/// <summary>
/// 獲取指定頁面的Stream
/// </summary>
/// <param name="url">指定頁面的路徑</param>
/// <param name="cookieContainer">Cookie對象</param>
/// <param name="reference">頁面引用</param>
public Stream GetStream(string url, CookieContainer cookieContainer, string reference)

/// <summary>
/// 根據Cookie字符串獲取Cookie的集合
/// </summary>
/// <param name="cookieString">Cookie字符串</param>
/// <returns></returns>
public CookieCollection GetCookieCollection(string cookieString)

/// <summary>
/// 獲取HTML頁面內容指定隱藏域Key的Value內容
/// </summary>
/// <param name="html">待操作的HTML頁面內容</param>
/// <param name="key">隱藏域的名稱</param>
/// <returns></returns>
public string GetHiddenKeyValue(string html, string key)

/// <summary>
/// 獲取網頁的編碼格式
/// </summary>
/// <param name="url">網頁地址</param>
/// <returns></returns>
public string GetEncoding(string url)

/// <summary>
/// 判斷URL是否有效
/// </summary>
/// <param name="url">待判斷的URL,可以是網頁以及圖片鏈接等</param>
/// <returns>200為正確,其余為大致網頁錯誤代碼</returns>
public int GetUrlError(string url)

/// <summary>
/// 移除Html標記
/// </summary>
public string RemoveHtml(string content)

/// <summary>
/// 返回 HTML 字符串的編碼結果
/// </summary>
/// <param name="inputData">字符串</param>
/// <returns>編碼結果</returns>
public static string HtmlEncode(string inputData)

/// <summary>
/// 返回 HTML 字符串的解碼結果
/// </summary>
/// <param name="str">字符串</param>
/// <returns>解碼結果</returns>
public static string HtmlDecode(string str)

#endregion

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

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);
..............
}

實際操作可能更多的是要記錄Cookie信息,方便下一次的調用,還有可能需要獲取驗證碼等等,復雜一點的例子代碼如下所示。

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("獲取登陸碼錯誤,請檢查您的網絡!");
return;
}
e.Result = Image.FromStream(s);
}

上面的操作都是使用GET方式獲取頁面內容或者數據的,另外還有一種方式就是使用POST方式提交數據,並獲取頁面內容的,如下例子所示。

#region 構造提交參數    
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);//數量
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方式提交內容,並返回頁面結果
re = new Regex(circleReg.ToString(), RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
mc = re.Match(content);
}
catch (Exception ex)
{
LogTextHelper.WriteLine(ex.ToString());
break;
}

下面是一些具體應用的例子截圖,主要就是通過該輔助類獲取、分析網頁的處理結果。

 

3、管理文檔服務器類,提供文件上傳、下載、刪除等功能輔助類 FileServerManage。  

實現效果

1) 本輔助類主要是用來方便實現管理文檔服務器類,提供文件上傳、下載、刪除等功能。 不過注意,由於IIS操作限制,可能一些后綴名的文件不支持訪問。 

2)FileServerManage 主要是通過IIS網站方式上傳管理文件附件的,要使用該輔助類庫的功能,需要為指定的目錄(一般在文件服務器上一個目錄)建立一個虛擬網站,指定端口等參數,該輔助類庫的構造函數,使用的是虛擬網站的URL地址以及文件服務器的登錄賬號和密碼(本機則使用本機的賬號密碼)。
3)另外使用IIS作為文件上傳操作,除了需要用到當前機器的賬號密碼登錄外,還需要在IIS管理中開通/啟用WebDev的功能。

 

實現代碼

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

/// <summary>    
/// 構造函數
/// </summary>
public FileServerManage()

/// <summary>
/// 構造函數
/// </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">流對象</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>
/// 通過HttpResponse方式讀取文件,Web開發才可以使用
/// </summary>
/// <param name="newFileName">新文件名稱,可包含文件夾(test/test.txt)</param>
/// <param name="oldFileName">原文件名稱</param>
/// <returns></returns>
public string ReadFile(string newFileName, string oldFileName)

/// <summary>
/// 讀取服務器文件到字節數據中
/// </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");
}

//利用子目錄上傳,需要服務器手動創建目錄
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、網絡相關操作輔助類 NetworkUtil  

實現效果

1) 本輔助類主要是用來方便實現網絡相關操作,可以對IP或者域名進行相互解析,基於Socket的TCP/UDP相關操作,檢測本機是否聯網等相關的網絡操作。  

實現代碼

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

 

/// <summary>    
/// 獲取本地機器IP地址
/// </summary>
/// <returns></returns>
public static string GetLocalIP()

/// <summary>
/// 檢查設置的IP地址是否正確,並返回正確的IP地址,無效IP地址返回"-1"。
/// </summary>
/// <param name="ip">設置的IP地址</param>
/// <returns>非法IP 則返回 -1 </returns>
public static string GetValidIP(string ip)

/// <summary>
/// 檢查設置的端口號是否正確,並返回正確的端口號,無效端口號返回-1。
/// </summary>
/// <param name="port">設置的端口號</param>
public static int GetValidPort(string port)

/// <summary>
/// 將字符串形式的IP地址轉換成IPAddress對象
/// </summary>
/// <param name="ip">字符串形式的IP地址</param>
public static IPAddress StringToIPAddress(string ip)

/// <summary>
/// 獲取本機的計算機名
/// </summary>
public static string LocalHostName

/// <summary>
/// 獲取本機的局域網IP
/// </summary>
public static string LANIP

/// <summary>
/// 獲取本機在Internet網絡的廣域網IP
/// </summary>
public static string WANIP

/// <summary>
/// 獲取遠程客戶機的IP地址
/// </summary>
/// <param name="clientSocket">客戶端的socket對象</param>
public static string GetClientIP(Socket clientSocket)

/// <summary>
/// 創建一個IPEndPoint對象
/// </summary>
/// <param name="ip">IP地址</param>
/// <param name="port">端口號</param>
public static IPEndPoint CreateIPEndPoint(string ip, int port)

/// <summary>
/// 創建一個自動分配IP和端口的TcpListener對象
/// </summary>
public static TcpListener CreateTcpListener()

/// <summary>
/// 創建一個TcpListener對象
/// </summary>
/// <param name="ip">IP地址</param>
/// <param name="port">端口</param>
public static TcpListener CreateTcpListener(string ip, int port)

/// <summary>
/// 創建一個基於TCP協議的Socket對象
/// </summary>
public static Socket CreateTcpSocket()

/// <summary>
/// 創建一個基於UDP協議的Socket對象
/// </summary>
public static Socket CreateUdpSocket()

#region 獲取TcpListener對象的本地終結點
/// <summary>
/// 獲取TcpListener對象的本地終結點
/// </summary>
/// <param name="tcpListener">TcpListener對象</param>
public static IPEndPoint GetLocalPoint(TcpListener tcpListener)

/// <summary>
/// 獲取TcpListener對象的本地終結點的IP地址
/// </summary>
/// <param name="tcpListener">TcpListener對象</param>
public static string GetLocalPoint_IP(TcpListener tcpListener)

/// <summary>
/// 獲取TcpListener對象的本地終結點的端口號
/// </summary>
/// <param name="tcpListener">TcpListener對象</param>
public static int GetLocalPoint_Port(TcpListener tcpListener)

#endregion

#region 獲取Socket對象的本地終結點

/// <summary>
/// 獲取Socket對象的本地終結點
/// </summary>
/// <param name="socket">Socket對象</param>
public static IPEndPoint GetLocalPoint(Socket socket)

/// <summary>
/// 獲取Socket對象的本地終結點的IP地址
/// </summary>
/// <param name="socket">Socket對象</param>
public static string GetLocalPoint_IP(Socket socket)

/// <summary>
/// 獲取Socket對象的本地終結點的端口號
/// </summary>
/// <param name="socket">Socket對象</param>
public static int GetLocalPoint_Port(Socket socket)

#endregion

/// <summary>
/// 綁定終結點
/// </summary>
/// <param name="socket">Socket對象</param>
/// <param name="endPoint">要綁定的終結點</param>
public static void BindEndPoint(Socket socket, IPEndPoint endPoint)

/// <summary>
/// 綁定終結點
/// </summary>
/// <param name="socket">Socket對象</param>
/// <param name="ip">服務器IP地址</param>
/// <param name="port">服務器端口</param>
public static void BindEndPoint(Socket socket, string ip, int port)

/// <summary>
/// 指定Socket對象執行監聽,默認允許的最大掛起連接數為100
/// </summary>
/// <param name="socket">執行監聽的Socket對象</param>
/// <param name="port">監聽的端口號</param>
public static void StartListen(Socket socket, int port)

/// <summary>
/// 指定Socket對象執行監聽
/// </summary>
/// <param name="socket">執行監聽的Socket對象</param>
/// <param name="port">監聽的端口號</param>
/// <param name="maxConnection">允許的最大掛起連接數</param>
public static void StartListen(Socket socket, int port, int maxConnection)

/// <summary>
/// 指定Socket對象執行監聽
/// </summary>
/// <param name="socket">執行監聽的Socket對象</param>
/// <param name="ip">監聽的IP地址</param>
/// <param name="port">監聽的端口號</param>
/// <param name="maxConnection">允許的最大掛起連接數</param>
public static void StartListen(Socket socket, string ip, int port, int maxConnection)

/// <summary>
/// 連接到基於TCP協議的服務器,連接成功返回true,否則返回false
/// </summary>
/// <param name="socket">Socket對象</param>
/// <param name="ip">服務器IP地址</param>
/// <param name="port">服務器端口號</param>
public static bool Connect(Socket socket, string ip, int port)

/// <summary>
/// 以同步方式向指定的Socket對象發送消息
/// </summary>
/// <param name="socket">socket對象</param>
/// <param name="msg">發送的消息</param>
public static void SendMsg(Socket socket, byte[] msg)

/// <summary>
/// 使用UTF8編碼格式以同步方式向指定的Socket對象發送消息
/// </summary>
/// <param name="socket">socket對象</param>
/// <param name="msg">發送的消息</param>
public static void SendMsg(Socket socket, string msg)

/// <summary>
/// 以同步方式接收消息
/// </summary>
/// <param name="socket">socket對象</param>
/// <param name="buffer">接收消息的緩沖區</param>
public static void ReceiveMsg(Socket socket, byte[] buffer)

/// <summary>
/// 以同步方式接收消息,並轉換為UTF8編碼格式的字符串,使用5000字節的默認緩沖區接收。
/// </summary>
/// <param name="socket">socket對象</param>
public static string ReceiveMsg(Socket socket)

/// <summary>
/// 關閉基於Tcp協議的Socket對象
/// </summary>
/// <param name="socket">要關閉的Socket對象</param>
public static void Close(Socket socket)


/// <summary>
/// 檢測本機是否聯網
/// </summary>
/// <returns></returns>
public static bool IsConnectedInternet()

/// <summary>
/// 檢測本機是否聯網的連接屬性
/// </summary>
public static InternetConnectionStatesType CurrentState

/// <summary>
/// 檢測本機是否聯網(互聯網)
/// </summary>
/// <returns></returns>
public static bool IsOnline()

/// <summary>
/// 轉換主機域名DNS到IP地址
/// </summary>
/// <param name="hostname">主機域名DNS</param>
/// <returns></returns>
public static string ConvertDnsToIp(string hostname)

/// <summary>
/// 轉換主機IP地址到DNS域名
/// </summary>
/// <param name="ipAddress">主機IP地址</param>
/// <returns></returns>
public static string ConvertIpToDns(string ipAddress)

/// <summary>
/// 根據IP端點獲取主機名稱
/// </summary>
/// <param name="ipEndPoint">IP端點</param>
/// <returns></returns>
public static string GetHostName(IPEndPoint ipEndPoint)

/// <summary>
/// 根據主機IP地址對象獲取主機名稱
/// </summary>
/// <param name="ip">主機IP地址對象</param>
/// <returns></returns>
public static string GetHostName(IPAddress ip)

/// <summary>
/// 根據主機IP獲取主機名稱
/// </summary>
/// <param name="hostIP">主機IP</param>
/// <returns></returns>
public static string GetHostName(string hostIP)

/// <summary>
/// 得到一台機器的EndPoint端點
/// </summary>
/// <param name="entry">主機實體</param>
/// <returns></returns>
public static EndPoint GetNetworkAddressEndPoing(IPHostEntry entry)

/// <summary>
/// 主機名是否存在
/// </summary>
/// <param name="host">主機名</param>
/// <returns></returns>
public static bool IsHostAvailable(string host)


/// <summary>
/// 在主機名解析到一個IP主機實體
/// </summary>
/// <param name="hostname">主機名</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("本機IP:{0} \r\n", NetworkUtil.GetLocalIP());
sb.AppendFormat("檢測本機是否聯網:{0} \r\n", NetworkUtil.IsConnectedInternet());
sb.AppendFormat("www.iqid.com域名IP:{0} \r\n", NetworkUtil.ConvertDnsToIp("www.iqidi.com"));
sb.AppendFormat("本機LocalHostName:{0} \r\n", NetworkUtil.LocalHostName);
sb.AppendFormat("本機局域網IP:{0} \r\n", NetworkUtil.LANIP);
sb.AppendFormat("本機廣域網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代理設置輔助類 ProxyHelper。  

實現效果

1) 本輔助類主要是用來方便實現IE代理設置操作。

實現代碼

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

 

/// <summary>    
/// IE代理設置輔助類
/// </summary>
public class ProxyHelper
{
#region IE代理設置

/// <summary>
/// 讓IE支持WAP
/// </summary>
public static void SetIESupportWap()

/// <summary>
/// 設置代理
/// </summary>
/// <param name="ProxyServer">代理服務器</param>
/// <param name="EnableProxy">設置代理可用</param>
/// <returns></returns>
public static string SetIEProxy(string ProxyServer, int EnableProxy)


#endregion

#region 其他操作

/// <summary>
/// 測試代理配置
/// </summary>
/// <param name="setting">代理信息</param>
/// <param name="te">測試信息</param>
public static bool TestProxy(ProxySettingEntity setting, TestEntity te)

/// <summary>
/// 代理設置
/// </summary>
/// <param name="request">Web請求</param>
/// <param name="Proxy">代理設置</param>
public static void SetProxySetting(WebRequest request, ProxySettingEntity Proxy)

#endregion
}

/// <summary>
/// 測試信息
/// </summary>
[Serializable]
public class TestEntity
{
/// <summary>
/// 測試網站地址
/// </summary>
public string TestUrl

/// <summary>
/// 測試網站Title
/// </summary>
public string TestWebTitle

/// <summary>
/// Web編碼
/// </summary>
public string TestWebEncoding
}

/// <summary>
/// 代理設置
/// </summary>
[Serializable]
public class ProxySettingEntity
{
/// <summary>
/// 編號
/// </summary>
public int Id

/// <summary>
/// 代理服務器IP
/// </summary>
public string Ip

/// <summary>
/// 代理服務器端口
/// </summary>
public int Port

/// <summary>
/// 代理用戶名
/// </summary>
public string UserName

/// <summary>
/// 代理密碼
/// </summary>
public string Password

/// <summary>
/// 代理類型
/// </summary>
public int ProxyType
}

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

 

CHM幫助文檔持續更新中,統一下載地址是:  http://www.iqidi.com/download/commonshelp.rar 

最新公用類庫DLL+XML注釋文件下載地址是:http://files.cnblogs.com/wuhuacong/WHC.OrderWater.Commons.rar 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM