C#學習筆記 ----網路(第24章)----範例程式碼

來源:互聯網
上載者:User

標籤: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章)----範例程式碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.