2009年4月6日 星期一

Networking Programming網路程式設計

本篇文章介紹使用.NET Framework來撰寫網路應用程式,參考書籍可以看「Visual C# 2008網路程式設計之道」(真的是一本參考書),基峯資訊出版,黃嘉輝著,訂價台幣550元整。如果不想買的話,可以參考MSDN的網站,書裡面的內容和MSDN是差不多的,可以省下一些錢。

黃嘉輝(2008),Visual C# 2008網路程式設計之道,台北:碁峰。

要寫網路程式的話,最主要利用兩個namespace的類別(class),一個是System.Net,另一個是System.Net.Sockets

其中,建德兄說網路程式的設計與撰寫,可以利用非同步程式設計模式,參考http://msdn.microsoft.com/zh-tw/library/ms228969.aspx,這會是比較優秀的方法,避免視窗程式鎖住當機。

首先介紹OSI七層,貼在這裡當作參考(關鍵字);
  • Application
  • Presentation
  • Session
  • Transport
  • Network
  • Data Link
  • Physical
TCP/IP類的模型為五層:(多數英文教科書的分類)
  • Application Layer(HTTP, FTP, SMTP, DNS...)
  • Transport Layer(TCP, UDP)
  • Network Layer(IP)
  • Data Link Layer(Ethernet)
  • Physical Layer
在.NET Framework中有許多類別可以使用,依照逞用程度和功能性來區分:(其中符號||左邊為client用,右邊為server用)
  • System.Net.WebClient||無
  • System.Net.WebRequest, System.Net.WebResponse||無
  • System.Net.TcpClient,System.Net.UdpClient||System.Net.TcpListner,System.Net.UdpListner
  • System.Net.Sockets(沒有區分client-server)
依照容易使用(ease of use)的程度來看,最上面最簡單容易使用,而最下面System.Net.Sockets使用較複雜,相對的,因為System.Net.Sockets較複雜,原因是功能性(Functionality)最完善,你可以自己處理最多功能。到底要用哪一個類別來開發,依照需求來決定。

WebClient類別來說,WebClient使用下層的WebRequestWebResponse製作,避免讓我們接觸下層的複雜功能,也因此限制了一些!所以使用上要注意,進階功能還是要使用下層的類別。另外,WebClient類別僅支援HTTP、FTP、file的通訊協定,這可能是因為WebRequest和WebResponse的繼承類別只有這三類,所以僅支援HTTP、FTP、file囉!

如果要操作TCP和UDP的話,就使用System.Net.TcpClient ,System.Net.UdpClient, System.Net.TcpListner, System.Net.UdpListner這些類別。如果不要通訊協定的話,那就用最底層的System.Net.Sockets類別,Sockets類別跟任何通訊協定沒有關係。

另外,由於抽象類別WebRequestWebResponse有其他類別繼承,所謂的抽象類別(Abstract Class)是僅可以讓其他類別繼承(inherit),不能產生實體,你不能直接拿WebRequest和WebResponse來用,記住抽象類別這個特性。其關係為:

System.Net.WebRequest的子類別:
  • HttpWebRequest
  • FtpWebRequest
  • FileWebRequest

System.Net.WebResponse的子類別:
  • HttpWebResponse
  • FtpWebResponse
  • FileWebResponse

沒有留言:

張貼留言