標籤: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 forclient.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("[email protected]","Bill Evjen");mm.To.Add(new MailAddress("[email protected]","Paul Reese"));mm.To.Add(new MailAddress("[email protected]","Wrox Marketing"));mm.CC.Add(new MailAddress("[email protected]","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協議詳解(真的很經典)
C#學習筆記 ----網路(第24章)----範例程式碼