厚积薄发,丰富的公用类库积累,助你高效进行系统开发(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测试数据 " , " wuhuacong2013@163测试数据 " , " password " );
email.Subject = " 伍华聪的普通测试邮件 " ;
email.Body = string .Format( " 测试邮件正文内容 " );
email.IsHtml = true ;
email.From = " wuhuacong2013@163测试数据 " ;
email.FromName = " wuhuacong2013 " ;
email.AddRecipient( " 6966254@qq测试数据 " );
try
{
bool success = email.SendEmail();
MessageUtil.ShowTips(success ? " 发送成功 " : " 发送失败 " );
}
catch (Exception ex)
{
MessageUtil.ShowError(ex.Message);
}
3)如果使用发送附件、发送嵌入图片(正文中有图片显示内容的)方式,则例子代码如下所示。
EmailHelper email = new EmailHelper( " smtp.163测试数据 " , " wuhuacong2013@163测试数据 " , " 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测试数据 " ;
email.FromName = " wuhuacong2013 " ;
email.AddRecipient( " 6966254@qq测试数据 " );
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测试数据/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测试数据/ " ;
string url = string .Format( " http://ptlogin2.qq测试数据/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测试数据/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测试数据 ','')">)
// 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( " HdhCmsTestiqid测试数据域名IP:{0} \r\n " , NetworkUtil.ConvertDnsToIp( " HdhCmsTestiqidi测试数据 " ));
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://HdhCmsTestiqidi测试数据/download/commonshelp.rar
最新公用类库DLL+XML注释文件下载地址是: https://files.cnblogs测试数据/wuhuacong/WHC.OrderWater.Commons.rar
主要研究技术:代码生成工具、Visio二次开发、送水管理软件等共享软件开发
专注于 Winform开发框架 、WCF开发框架的研究及应用。
转载请注明出处:
撰写人:伍华聪 http: // HdhCmsTestiqidi测试数据
当前标签: 公用类库使用帮助
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(12)--- 网络相关操作辅助类 伍华聪 2012-03-27 08:49 阅读:550 评论:8
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(11)---各种线程相关操作类 伍华聪 2012-03-26 23:28 阅读:696 评论:8
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(10)---各种线程同步的集合类 伍华聪 2012-03-25 17:00 阅读:1909 评论:7
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(9)----各种常用辅助类 伍华聪 2011-12-03 14:37 阅读:3577 评论:83
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(8)----非对称加密、BASE64加密、MD5等常用加密处理 伍华聪 2011-11-28 20:54 阅读:2746 评论:37
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(7)-----声音播放、硬件信息、键盘模拟及钩子、鼠标模拟及钩子等设备相关 伍华聪 2011-11-10 00:35 阅读:4052 评论:39
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(6)----全屏截图、图标获取、图片打印、页面预览截屏、图片复杂操作等 伍华聪 2011-10-20 23:40 阅读:5292 评论:63
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(5)----热键、多线程、窗体动画冻结等窗体操作 伍华聪 2011-10-13 23:26 阅读:3847 评论:32
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(4)----CSV、Excel、INI文件、独立存储等文件相关 伍华聪 2011-07-30 11:58 阅读:5274 评论:164
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(3)----数据库相关操作 伍华聪 2011-07-09 18:25 阅读:4534 评论:61
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(2)----常用操作 伍华聪 2011-07-04 22:05 阅读:6759 评论:40
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(1)----开篇总结 伍华聪 2011-06-30 22:48 阅读:13093 评论:142
作者: Leo_wl
出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于厚积薄发,丰富的公用类库积累,助你高效进行系统开发(12) 网络相关操作辅助类的详细内容...