1.WebClient类................................................................................................................................2(1)WebClient类的主要方法..................................................................................................2(2)DownloadData()方法.........................................................................................................2(3)OpenRead()方法.................................................................................................................2(4)UploadData()方法.............................................................................................................2(5)总结WebClient类.............................................................................................................22.WebRequest类与WebResponse类..............................................................................................2(1)WebRequest类与WebResponse类简介...........................................................................2(2)使用示例.............................................................................................................................3(3)WebRequest类与WebResponse类的子类(继承结构)...................................................3(4)HttpWebRequest类与HttpWebResponse类使用示例...................................................3(5)身份验证.............................................................................................................................3(6)使用代理.............................................................................................................................4(7)异步请求.............................................................................................................................43.WebBrowser控件..........................................................................................................................4(1)使用WebBrowser控件.......................................................................................................4(2)WebBrowser控件常用属性、方法与事件........................................................................网络工具类(URL、IP、DNS).......................................................................................................5(1)Uri与UriBuilder.............................................................................................................5(2)IPAddress、IPHostEntry与Dns....................................................................................5(3)解码与编码(Encoding).....................................................................................................65.底层的网络协议类.......................................................................................................................7(1)Socket.................................................................................................................................7(2)NetworkStream、TcpClient与TcpListener................................................................8(3)UdpClient...........................................................................................................................8(4)SmtpClient.........................................................................................................................9作者:李志伟时间:2014-02-071.WebClient类
(1)WebClient类的主要方法DownloadXXX()方法:下载URI资源文件OpenXXX()方法:打开URI资源流UploadXXX()方法:上传资源到URI(2)DownloadData()方法classProgram{staticvoidMain(string[]args){WebClientweb=newWebClient();byte[]temp=web.DownloadData(\"http://www.baidu.com\");//下载URI资源文件stringResponse=Encoding.UTF8.GetString(temp);//解码Console.WriteLine(Response);Console.Read();}}(3)OpenRead()方法classProgram{staticvoidMain(string[]args){WebClientweb=newWebClient();Streamst=web.OpenRead(\"http://www.baidu.com\");//打开URI资源流StreamReadersr=newStreamReader(st);stringResponse=sr.ReadToEnd();Console.WriteLine(Response);Console.Read();}}(4)UploadData()方法classProgram{staticvoidMain(string[]args){WebClientweb=newWebClient();stringstr=\"李志伟\";byte[]response=web.UploadData(\"http://www.baidu.com\",Encoding.Default.GetBytes(str));Console.WriteLine(Encoding.Default.GetString(response));//解码Console.Read();}}上传数据时出现问题,百度报错!这是因为没有权限。(5)总结WebClient类虽然WebClient类使用简单,但是其功能有限,特别是不能使用它提供身份验证证书。这样,在上传数据时问题就出现了,许多站点不接受没有身份验证的上传文件。这是由于WebClient类是非常一般的类,可以使用任意协议发送请求和接受响应(如:HTTP、FTP等)。但它不能处理特定于任何协议的任何特性,例如,专用于HTTP的cookie。如果想利用这些特性就需要使用WebRequest类与WebResponse类为基类的一系列类。2.WebRequest类与WebResponse类
(1)WebRequest类与WebResponse类简介WebRequest类与WebResponse类是抽象类,其子类对象代表某个特定URI协议的请求对象或响应对象。调用WebRequest.Create()方法得到WebResponse对象。调用WebResponse对象的GetResponse()方法得到WebResponse对象。(2)使用示例classProgram{staticvoidMain(string[]args){WebRequestreq=WebRequest.Create(\"http://www.baidu.com\");//得到请求对象WebResponseres=req.GetResponse();//得到相应对象Streamstrm=res.GetResponseStream();//得到相应数据流StreamReadersr=newStreamReader(strm);Console.WriteLine(sr.ReadToEnd());Console.Read();}}(3)WebRequest类与WebResponse类的子类(继承结构)(4)HttpWebRequest类与HttpWebResponse类使用示例classProgram{staticvoidMain(string[]args){stringuri=\"http://www.baidu.com\";HttpWebRequesthttpRe=(HttpWebRequest)HttpWebRequest.Create(uri);HttpWebResponsehttpRes=(HttpWebResponse)httpRe.GetResponse();Streamstrm=httpRes.GetResponseStream();//得到相应数据流StreamReadersr=newStreamReader(strm);Console.WriteLine(sr.ReadToEnd());Console.Read();}}这里以HTTP协议为例使用了对应了类,其他协议的类的使用方法与此类似。(5)身份验证如果需要把身份验证证书附带在请求中,就使用WebRequest类中的Credentials属性。classProgram{staticvoidMain(string[]args){WebRequestreq=WebRequest.Create(\"http://www.baidu.com\");//得到请求对象NetworkCredentialcred=newNetworkCredential(\"userName\",\"password\");req.Credentials=cred;//调用GetResponse()之前赋值WebResponseres=req.GetResponse();//得到相应对象Streamstrm=res.GetResponseStream();//得到相应数据流StreamReadersr=newStreamReader(strm);Console.WriteLine(sr.ReadToEnd());Console.Read();}}(6)使用代理使用代理服务器需要用到WebRequest类中的Proxy属性,以及WebProxy对象。classProgram{staticvoidMain(string[]args){WebRequestreq=WebRequest.Create(\"http://www.baidu.com\");//得到请求对象NetworkCredentialcred=newNetworkCredential(\"userName\",\"password\",\"Domain\");WebProxywp=newWebProxy(\"192.168.1.100\",true);//设置代理服务器地址req.Credentials=cred;//调用GetResponse()之前赋值req.Proxy=wp;//调用GetResponse()之前赋值WebResponseres=req.GetResponse();//得到相应对象Streamstrm=res.GetResponseStream();//得到相应数据流StreamReadersr=newStreamReader(strm);Console.WriteLine(sr.ReadToEnd());Console.Read();}}(7)异步请求若需要使用异步请求,就可以使用BeginGetRequestStream()、EndGetRequestStream()与BeginGetResponse()、EndGetResponse()方法。使用异步请求就不需要等待请求的响应,主线程不必阻塞可以直接向下执行。示例如下:classProgram{staticvoidMain(string[]args){WebRequestreq=WebRequest.Create(\"http://www.baidu.com\");//得到请求对象req.BeginGetResponse(newAsyncCallback(Callback),req);//得到相应对象Console.WriteLine(\"异步请求已发送...\");Console.Read();}//回调函数privatestaticvoidCallback(IAsyncResultar){Thread.Sleep(5000);//休眠5秒WebRequestreq=(WebRequest)ar.AsyncState;WebResponseres=req.EndGetResponse(ar);Streamstrm=res.GetResponseStream();//得到相应数据流StreamReadersr=newStreamReader(strm);Console.WriteLine(sr.ReadToEnd());}}3.WebBrowser控件
(1)使用WebBrowser控件使用WebBrowser控件非常简单,如下图:其按钮的单击事件代码如下:privatevoidbutton1_Click(objectsender,EventArgse)//按钮事件{this.webBrowser1.Navigate(\"http://www.baidu.com\");//加载文档}(2)WebBrowser控件常用属性、方法与事件WebBrowser控件常用的方法:Navigate():加载URI页面,GoBack():后退,GoForward():前进,Refresh():刷新,Stop():停止,GoHome():浏览主页。WebBrowser控件的常用属性:Document:获取当前正在浏览的文档,DocumentTitle:获取当前正在浏览的网页标题,StatusText:获取当前状态栏的文本,Url:获取当前正在浏览的网址的Uri,ReadyState:获取浏览的状态。WebBrowser控件的常用事件:DocumentCompleted:在WebBrowser控件完成加载文档时发生,XXXChanged:在XXX属性值更改时发生。注意:得到了Document属性就可以直接操作网页里的元素了!4.网络工具类(URL、IP、DNS)
(1)Uri与UriBuilderUri与UriBuilder类的主要区别是:Uri提供了很多只读属性,Uri对象被创建后就不能修改了;而UriBuilder类的属性较少,只允许构建一个完整的URI,这些属性可读写。classProgram{staticvoidMain(string[]args){Uriuri=newUri(\"http://www.baidu.com/s?wd=URI\");//只读属性,Uri对象被创建后就不能修改了Console.WriteLine(uri.Query);//获取指定URI中包括的任何查询信息:?wd=URIConsole.WriteLine(uri.AbsolutePath);//获取URI的绝对路径:/sConsole.WriteLine(uri.Scheme);//获取此URI的方案名称:httpConsole.WriteLine(uri.Port);//获取此URI的端口号:80Console.WriteLine(uri.Host);//获取此实例的主机部分:www.baidu.comConsole.WriteLine(uri.IsDefaultPort);//URI的端口值是否为此方案的默认值:true//创建UriBuilder对象,并给其属性赋值UriBuilderurib=newUriBuilder();urib.Host=uri.Host;urib.Scheme=uri.Scheme;urib.Path=uri.AbsolutePath;urib.Port=uri.Port;//测试UriTest(uri);//使用Uri对象UriTest(urib.Uri);//使用UriBuilder对象Console.Read();}//测试Uri对象staticvoidUriTest(Uriuri){Console.WriteLine(\"==============\"+uri+\"开始===============\");Thread.Sleep(5000);HttpWebRequesthttpweb=(HttpWebRequest)HttpWebRequest.Create(uri);HttpWebResponseres=(HttpWebResponse)httpweb.GetResponse();Streamstream=res.GetResponseStream();StreamReaderstrread=newStreamReader(stream);Console.WriteLine(strread.ReadToEnd());Console.WriteLine(\"======================完成===================\\n\\n\\n\\n\");}}(2)IPAddress、IPHostEntry与DnsIPAddress类提供了对IP地址的转换、处理等功能。IPHostEntry类的实例对象中包含了Internet主机的相关信息。Dns类提供了一系列静态的方法,用于获取提供本地或远程域名等功能。classProgram{staticvoidMain(string[]args){//IPAddress类提供了对IP地址的转换、处理等功能IPAddressip=IPAddress.Parse(\"202.108.22.5\");//百度的IPbyte[]bit=ip.GetAddressBytes();foreach(bytebinbit){Console.Write(b+\"\");}Console.WriteLine(\"\\n\"+ip.ToString()+\"\\n\\n\");//IPHostEntry类的实例对象中包含了Internet主机的相关信息IPHostEntryiphe=Dns.GetHostEntry(\"www.microsoft.com\");Console.WriteLine(\"www.microsoft.com主机DNS名:\"+iphe.HostName);foreach(IPAddressaddressiniphe.AddressList){Console.WriteLine(\"关联IP:\"+address);}Console.WriteLine(\"\\n\");//Dns类提供了一系列静态的方法,用于获取提供本地或远程域名等功能iphe=Dns.GetHostEntry(Dns.GetHostName());Console.WriteLine(\"本地计算机名:\"+iphe.HostName);foreach(IPAddressaddressiniphe.AddressList){Console.WriteLine(\"关联IP:\"+address);}Console.Read();}}(3)解码与编码(Encoding)classProgram{staticvoidMain(string[]args){Encodingutf8=Encoding.UTF8;Encodinggb2312=Encoding.GetEncoding(\"GB2312\");//编码stringtest=\"编码解码测试ABCDabcd!\";char[]source=test.ToCharArray();intlen=utf8.GetByteCount(source,0,test.Length);byte[]result=newbyte[len];utf8.GetBytes(source,0,test.Length,result,0);foreach(bytebinresult){Console.Write(\"{0:X}\",b);//16进制显示}Console.WriteLine();//解码Console.WriteLine(utf8.GetString(result));//输出字符串//得到所有系统编码EncodingInfo[]encodings=Encoding.GetEncodings();foreach(EncodingInfoeinencodings){Console.WriteLine(e.Name);}//将URI地址进行编码Console.WriteLine(Uri.EscapeUriString(\"http://www.baidu.com/s?wd=李志伟\"));//使用HttpUtility类进行编码与解码stringtemp=HttpUtility.UrlEncode(\"李志伟\",gb2312);Console.WriteLine(temp+\"-->\"+HttpUtility.UrlDecode(temp,gb2312));Console.Read();}}5.底层的网络协议类
(1)SocketSocket:实现Berkeley套接字接口。客户端代码:classProgram{staticvoidMain(string[]args){Thread.Sleep(1000*2);Socketclient=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);//服务器的IP和端口IPEndPointie=newIPEndPoint(IPAddress.Parse(\"127.0.0.1\"),9999);client.Connect(ie);//连接服务端byte[]data=newbyte[1024];intrecv=client.Receive(data);//接收消息Console.WriteLine(Encoding.UTF8.GetString(data,0,recv));for(inti=0;i<20;i++){client.Send(Encoding.UTF8.GetBytes(i+\":李志伟发送的消息!\\n\"));Console.WriteLine(\"发送消息数:\"+i);Thread.Sleep(1000);}client.Shutdown(SocketShutdown.Both);//断开连接client.Close();Console.WriteLine(\"连接已断开!\");Console.Read();}}服务端代码:classProgram{staticvoidMain(string[]args){IPEndPointipep=newIPEndPoint(IPAddress.Parse(\"127.0.0.1\"),9999);Socketsock=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);sock.Bind(ipep);//设置监听地址sock.Listen(10);//监听Console.WriteLine(\"已监听...\");while(true){Socketclient=sock.Accept();//连接客户端Console.WriteLine(\"连接成功:\"+client.RemoteEndPoint.ToString()+\"-->\"+client.LocalEndPoint.ToString());byte[]data=Encoding.UTF8.GetBytes(\"欢迎!!!\");client.Send(data,data.Length,SocketFlags.None);//给客户端发送信息//不断的从客户端获取信息while(client.Connected){data=newbyte[1024];intrecv=client.Receive(data);Console.WriteLine(Encoding.UTF8.GetString(data,0,recv));}client.Close();}sock.Close();}}(2)NetworkStream、TcpClient与TcpListenerNetworkStream:提供用于网络访问的基础数据流。TcpClient:为TCP网络服务提供客户端连接。TcpListener:从TCP网络客户端侦听连接。客户端代码:classProgram{staticvoidMain(string[]args){Thread.Sleep(1000*2);for(inti=0;i<20;i++){TcpClienttcpClient=newTcpClient();tcpClient.Connect(IPAddress.Parse(\"127.0.0.1\"),9999);Console.WriteLine(i+\":连接成功!\");NetworkStreamns=tcpClient.GetStream();//打开流Byte[]sendBytes=Encoding.UTF8.GetBytes(i+\":李志伟发送的消息!\\n\");ns.Write(sendBytes,0,sendBytes.Length);ns.Dispose();//释放流tcpClient.Close();//释放连接Console.WriteLine(\"已发送消息数:\"+i);Thread.Sleep(1000);}Console.Read();}}服务端代码:classProgram{staticvoidMain(string[]args){IPAddressip=IPAddress.Parse(\"127.0.0.1\");TcpListenerlistener=newTcpListener(ip,9999);//IP地址与端口号listener.Start();//开始侦听Console.WriteLine(\"已开始侦听...\");while(true){TcpClientclient=listener.AcceptTcpClient();//接受挂起的连接请求Console.WriteLine(\"连接成功{0}-->{1}\",client.Client.RemoteEndPoint.ToString(),client.Client.LocalEndPoint.ToString());NetworkStreamns=client.GetStream();StreamReadersread=newStreamReader(ns);Console.WriteLine(sread.ReadToEnd());}}}注意:TcpClient.Client属性就是Socket对象!(3)UdpClientUdpClient:提供用户数据报(UDP)网络服务。发送端代码:classProgram{staticvoidMain(string[]args){Thread.Sleep(1000*2);UdpClientudpClient=newUdpClient();udpClient.Connect(IPAddress.Parse(\"127.0.0.1\"),9999);//连接for(inti=0;i<20;i++){Byte[]data=Encoding.UTF8.GetBytes(i+\":李志伟发送的消息!\");udpClient.Send(data,data.Length);//发送数据Console.WriteLine(\"发送消息数:\"+i);Thread.Sleep(1000);}udpClient.Close();Console.Read();}}接收端代码:classProgram{staticvoidMain(string[]args){UdpClientudpClient=newUdpClient(9999);Console.WriteLine(\"已监听...\");IPEndPointRemoteIpEndPoint=null;while(true)//不断地接收数据{byte[]data=udpClient.Receive(refRemoteIpEndPoint);//接收数据stringstr=Encoding.UTF8.GetString(data);Console.WriteLine(\"收到消息:\"+str);Console.WriteLine(\"消息来源:\"+RemoteIpEndPoint.ToString()+\"\\n\");}}}(4)SmtpClientSmtpClient类是用来发送邮件的,它在System.Web.Mail命名空间下。调用SmtpClient类的send(newMessage)方法,其中的参数newMessage是一个MailMessage对象,所以我们在调用send(newMessage)方法前,须实例化MailMessage类,然后对newMessage的属性设值。classProgram{staticvoidMain(string[]args){SmtpClientsmtp=newSmtpClient();MailMessagemail=newMailMessage(\"XXX@163.com\",\"XXXXXX@qq.com\");//图像附件Attachmentattach=newAttachment(@\"F:\\图片.jpg\",MediaTypeNames.Image.Jpeg);//设置ContentIdattach.ContentId=\"pic\";//ZIP附件Attachmentattach2=newAttachment(@\"F:\\图片.rar\",\"application/x-zip-compressed\");mail.Attachments.Add(attach);//添加附件mail.Attachments.Add(attach2);//添加附件//标题和内容,注意设置编码,因为默认编码是ASCIImail.Subject=\"你好\";mail.SubjectEncoding=Encoding.UTF8;//HTML内容mail.Body=\"
来自李志伟。
\";mail.BodyEncoding=Encoding.UTF8;//指示改电子邮件内容是HTML格式mail.IsBodyHtml=true;//SMTP设置(根据邮箱类型设置,这里是163Mail的SMTP服务器地址)smtp.Host=\"smtp.163.com\";smtp.UseDefaultCredentials=false;//某些SMTP服务器可能不支持SSL,会抛出异常smtp.EnableSsl=true;smtp.Credentials=newNetworkCredential(\"XXX@163.com\",\"password\");smtp.DeliveryMethod=SmtpDeliveryMethod.Network;//发送smtp.Send(mail);Console.WriteLine(\"=============OK=============\");Console.Read();}}因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务