标签:style blog http io ar color os 使用 sp
URI (Uniform Resource Identifier,统一资源标识符)
System.Net.WebClient 请求文件
.NET Framework 目前支持以http:、https:和file:标识符开头的URI
WebClient下载方法,DownloadFile()
WebClient Client = new WebClient(); Client.DownloadFile("http://www.reuters.com","ReutesHomepage.htm");
WebClient 从Web站点检索数据方法,OpenRead()
WebClient Client = new WebClient(); Stream strm = Client.OpenRead("http://www.reuters.com");
WebClient OpenWrite()
WebClient webClient = new WebClient(); Stream stream = webClient.OpenWrite("http://localhost/accept/newfile.txt","PUT"); StreamWriter streamWriter = new StreamWriter(stream); streamWriter.WriteLine("Hello World"); streamWriter.Close();
WebClient UploadFile()和UploadData()
WebClient client = new WebClient(); client.UploadFile("http://www.ourwebsite.com/NewFile.htm","C:\\WebSiteFiles\\NewFile.htm"); byte[] image; //code to initialize image so it contains all the binary data for client.UploadData("http://www.ourwebsite.com/NewFile.jpg",image);
WebRequest类、WebResponse类
WebRequest类代表要给某个特定URI发送信息的请求,URI作为参数传递给Create()方法
WebResponse类代表从服务器检索的数据。调用WebRequest.GetResponse()方法,实际上是把请求发给Web服务器,并创建一个Response对象,以检查返回的数据。
与WebClient对象一样,可以得到一个代表数据的数据流,使用WebResponse.GetResponseStream()方法获得。
WebRequest wrq = WebRequest.Create("http://www.reuters.com"); WebResponse wrs = wrq.GetResponse(); Stream strm = wrs.GetResponseStream(); StreamReader sr = new StreamReader(strm); string line; while((line = sr.ReadLine()) != null) { listBox1.Items.Add(line); } strm.Close();
Timeout属性 控制WebRequest对象在抛出WebException异常之前等待相应的响应时间
WebException.Status属性 查看产生异常的原因
KeepAlive属性 通过HttpWebRequest,允许多个请求使用同一个连接,在后续的请求中节省关闭和重新打开连接的时间
AllowAutoRedirect属性 专用于HttpWebRequest,使用这个属性可以控制Web请求是否应自动跟随Web服务器上的重定向响应
Credentials属性 身份验证
NetworkCredential myCred = new NetworkCredential("myusername","mypassword"); wrq.Credentials = myCred;
使用代理,需要使用WebProxy对象
WebProxy wp = new WebProxy("192.168.1.100",true); wp.Credentials = new NetworkCredential("user1","user1Password"); WebRequest wrq = WebRequest.Create("http://www.reuters.com"); wrq.Proxy = wp; WebResponse wrs = wrq.GetResponse();
除了证书,还需要设计用户的域
WebProxy wp = new WebProxy("192.168.1.100",true); wp.Credentials = new NetworkCredential("user1","user1Password","myDomain"); WebRequest wrq = WebRequest.Create("http://www.reuters.com"); wrq.Proxy = wp; WebResponse wrs = wrq.GetResponse();
可以异步请求页面,使用BeginGetResponse()方法和EndGetResponse()方法
WebRequest wrq = WebRequest.Create("http://www.reuters.com"); wrq.BeginGetResponse(new AsyncCallback(OnResponse),wrq);
WebBrowser控件
非WebBrowse控件,使用System.Diagnostics名称空间中的Process打开Web页
Process myProcess = new Process(); myProcess.StartInfo.FileName = "iexplore.exe"; myProcess.StartInfo.Arguments = "http://www.wrox.com"; myProcess.Start();
使用LinkLabel控件
private void linkLabel1_LinkClicked(object sender,LinkLabelLinkClickedEventArgs e) { WebBrowser wb = new WebBrowser(); wb.Navigate("http://www.wrox.com",true); }
WebBrowser控件的Navigated事件
private void webBrowser1_Navigated(object sender,WebBrowserNavigatedEventArgs e) { textBox1.Text = webBrowser1.Url.ToString(); this.Text = webBrowser1.DocumentTitle.ToString(); }
WebBrowser控件的GoBack()方法、GoForward()方法、Stop()、Refresh()和GoHome()方法
WebBrowser控件的Print()
WebBrowser wb = new WebBrowser(); wb.Navigate("http://www.wrox.com"); wb.Print();
实用工具类
Uri和UriBuilder是System名称空间中的两个类,用于表示URI。
Uri提供只读属性,UriBuilder属性可读写
IPAddress类代表IP地址
IPAddress ipAddress = IPAddress.Parse("234.56.78.9"); byte[] address = ipAddress.GetAddressBytes(); string ipString = ipAddress.ToString();
IPHostEntry类 封装与某台特定的主机相关的信息
Dns类 能够与默认的DNS服务器进行通信,Dns类有两个重要的静态方法:Resolve()方法和GetHostByAddress()方法
IPHostEntry wroxHost = Dns.Resolve("www.wrox.com"); IPHostEntry wroxHostCopy = Dns.GetHostByAddress("208.215.179.178");
System.Net.Sockets
Socket 这个底层的类用于管理连接。WebRequest、TcpClient和UdpClient等类在内部使用这个类
NetworkStream 这个类是从Stream派生的,它表示来自网络的数据流
SmtpClient 允许通过SMTP发送消息(邮件)
TcpClient 允许创建和使用TCP连接
TcpListener 允许侦听引入的TCP连接请求
UdpClient 用于为UDP客户创建连接(UDP是TCP的一种替代协议,但它没有得到广泛的使用,主要用于本地网络)
SmtpClient对象可以通过SMTP传送邮件消息
SmtpClient sc = new SmtpClient("mail.mySmtpHost.com"); sc.Host = "mail.mySmtpHost.com"; MailMessage mm = new MailMessage(); mm.Sender = new MailAddress("evjen@yahoo.com","Bill Evjen"); mm.To.Add(new MailAddress("editor@wrox.com","Paul Reese")); mm.To.Add(new MailAddress("marketing@wrox.com","Wrox Marketing")); mm.CC.Add(new MailAddress("publisher@wrox.com","Barry Pruett")); mm.Subject = "The latest chapter"; mm.Body = "<b>Here you can put a long message</b>"; mm.IsBodyHtml = true; mm.Priority = MailPriority.High; Attachment att = new Attachment("myExcelResults.zip",MediaTypeNames.Application.Zip); mm.Attachments.Add(att); sc.Send(mm);
传输控制协议(TCP)类为连接和发送两个端点之间的数据提供了简单的方法
端点是IP地址和端口号的组合
TcpListener类用Start()方法侦听引入的TCP连接
当连接请求到达时,可以使用AcceptSocket()方法返回一个套接字,以与远程计算机通信
或使用AcceptTcpClient()方法通过高层TcpClient对象进行通信
private void btnSend_Click(object sender,System.EventArgs e) { TcpClient tcpClient = new TcpClient(txtHost.Text,Int32.Parse(txtPort.Text)); NetworkStream ns = tcpClient.GetStream(); FileStream fs = File.Open("form1.cs",FileMode.Open); int data = fs.ReadByte(); While(data != -1) { ns.WriteByte((byte)data); data = fs.ReadByte(); } fs.Close(); ns.Close(); tcpClient.Close(); }
//添加后台线程 public Form1() { InitializeComponent(); Thread thread = new Thread(new ThreadStart(Listen)); thread.Start(); } public void Listen() { IPAddress localAddr = IPAddress.Parse("127.0.0.1"); Int32 port = 2112; TcpListener tcpListener = new TcpListener(localAddr,port); tcpListener.Start(); TcpClient tcpClient = tcpListener.AcceptTcpClient(); NetworkStream ns = tcpClient.GetStream(); StreamReader sr = new StreamReader(ns); string result = sr.ReadToEnd(); Invoke(new UpdateDisplayDelegate(UpdateDisplay),new object[]{result}); tcpClient.Close(); tcpListener.Stop(); }
UdpClient类 成员函数Send()把一个字节数组作为参数,Receive()函数则返回一个字节数组
UDP是一个无连接的协议,可以指定把通信的端点作为Send()方法和Receive()方法的一个参数
UdpClient udpClient = new UdpClient(); string sendMsg = "Hello Echo Server"; byte[] sendBytes = Encoding.ASCII.GetBytes(sendMsg); udpClient.Send(sendBytes,sendBytes.Length,"SomeEchoServer.net",7); IPEndPoint endPoint = new IPEndPoint(0,0); byte[] rcvBytes = udpClient.Receive(ref endPoint); string rcvMessage = Encoding.ASCII.GetString(rcvBytes,0,rcvBytes.Length); //should print out "Hello Echo Server" Console.WriteLine(rcvMessage);
UdpClient类和TcpClient类在最底层的Socket类上提供了一个抽象层
Socket类提供了网络编程中最高级的控制
用Socket类重写TcpReceive应用程序
public void Listen() { Socket listener = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); listener.Bind(new IPEndPoint(IPAddress.Any,2112)); listener.Listen(0); Socket socket = listener.Accept(); Stream netStream = new NetworkStream(socket); StreamReader reader = new StreamReader(netStream); string result = reader.ReadToEnd(); Invoke(new UpdateDisplayDelegate(UpdateDisplay) new object[] {result}); socket.Close(); listener.Close(); }
结尾附上HTTP协议详解链接HTTP协议详解(真的很经典)
标签:style blog http io ar color os 使用 sp
原文地址:http://www.cnblogs.com/bmbh/p/4107871.html