要寫網路程式的話,最主要利用兩個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
- Application Layer(HTTP, FTP, SMTP, DNS...)
- Transport Layer(TCP, UDP)
- Network Layer(IP)
- Data Link Layer(Ethernet)
- Physical Layer
- 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)
以WebClient類別來說,WebClient使用下層的WebRequest和WebResponse製作,避免讓我們接觸下層的複雜功能,也因此限制了一些!所以使用上要注意,進階功能還是要使用下層的類別。另外,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類別跟任何通訊協定沒有關係。
另外,由於抽象類別WebRequest和WebResponse有其他類別繼承,所謂的抽象類別(Abstract Class)是僅可以讓其他類別繼承(inherit),不能產生實體,你不能直接拿WebRequest和WebResponse來用,記住抽象類別這個特性。其關係為:
System.Net.WebRequest的子類別:
- HttpWebRequest
- FtpWebRequest
- FileWebRequest
System.Net.WebResponse的子類別:
- HttpWebResponse
- FtpWebResponse
- FileWebResponse
沒有留言:
張貼留言