VISUAL BASIC 2008 網路程式設計 文魁資訊股份有限公司
第一章 TCP/IP網路基本概論 1-1 TCP/IP網路的發展簡史 1-2通訊協定 1-3 IP位址 1-4 DNS協定 1-5 DHCP協定 1-6網路故障偵測
TCP/IP網路發展簡史-70年代初期 70年代,美國國防部委託高等研究計畫機構 (Advanced Research Projects Agency,ARPA)發 展了一套稱之為ARPAnet的實驗性網路。 ARPAnet網路將不同平台的電腦系統串連起來, 是TCP/IP發展的前身。
1-1 TCP/IP網路的發展簡史 第一章 TCP/IP網路基本概論
TCP/IP網路發展簡史-70年代中期 70年代中期,ARPAnet改變為應用網路,改名為 國防部委託高等研究計畫機構(Defense Advanced Research Projects Agency,DARPA), 並由國防部的通訊署(Defense Communications Agency,DCA)來負責管理。 TCP/IP網路於此時開始發展。
TCP/IP網路發展簡史-80年代 80年代,美國國防部要求所有要與ARPAnet網路 連線的電腦,都必須使用ARPAnet協定 Unix系統與TCP/IP網路於此時開始結合起來。 ARPAnet將網路依保密與否切割成兩個網路: 未保密:MILNET 保密:ARPAnet Internet網路結合了MILNET與ARPAnet,90年代初 期ARPAnet網路告別歷史,由Internet網路所取代。
TCP/IP的兩個重要協定 傳輸控制協定(Transmission Control Protocol, TCP)。 網際協定(Internet Protocol,IP)。
RFC文件 所有的網路通訊協定,都是根據RFC文件來制訂 的。 http://www.rfc.net
1-2通訊協定 第一章 TCP/IP網路基本概論
OSI網路通訊模型 OSI:Open Systems Interconnect Refrence Model。 由國際標準組織(International Standard Organization,ISO)所發展的一套網路通訊協定 標準。
OSI網路通訊模型之七層架構
OSI - 實體層 Physical Layer 定義網路硬體的物理特性與規格: 電壓準位 資料流量控制方法 連接介面 區域網路接線標準
OSI - 資料連結層 Data Link Layer。 確保傳輸的資料可以被安全的遞送到對方。 由網路硬體製造商所提供的驅動程式來提供資 料連結層的服務。 MAC位址每個位元組由16進位的數值所組成。
OSI - 網路層 Network Layer 。 管理網路的連線。 建立網路之間的主機對主機的Connection: 讓要傳輸的資料封包,可以傳輸至指定的IP位址。 允許在不同的網路之間,透過路由器的服務來進行 資料的傳輸。
OSI - 傳輸層 Transport Layer 。 確保資料封包可以正確的傳輸。 TCP(傳輸控制協定,Transmission Control Protocol) 。 UDP(使用者資料封包協定,User Datagram Protocol) 。
OSI - 交談層 Session Layer 。 管理資料傳輸發送端與接收端的網路應用程式 之彼此相關互動。 管理各種網路應用程式的連線過程: FTP伺服器或FTP客戶端程式 發送Email:客戶端會有類似Outlook的電子郵件程 式,伺服端會有一個郵件伺服器。 瀏覽網頁:前端Internet Explorer的瀏覽器,伺服端 會有一個Web伺服器。
OSI - 表現層 Presentation Layer 。 對應用層提供標準的資料呈現規則。 定義資料交換的格式: 發出需求 傳送結果
OSI - 應用層 Application Layer 。 使用網路服務的應用程式。 處理所有使用者對網路的需求,如: 瀏覽網站 收發電子郵件 下載與上傳檔案
TCP/IP通訊協定模型 將OSI通訊協定整合並簡化,變成網路存取層、 網際層、傳輸層與應用層等四層架構。
TCP/IP - 網路存取層 存取實體網路的程序。 整合OSI通訊協定模型的實體層、資料連結層和 網路層的功能。 把資料封包傳送給網路設備。 定義資料封包的格式。 定義網路傳送的底層資料。
TCP/IP - 網際層 定義資料封包的格式,並處理資料傳送的路徑。 IP協定: 定義資料封包的格式。 定義IP位址的格式。 在下層的網路存取層與上層的傳輸層來傳輸資料。 負責決定資料傳送的路徑與封包的分割與重組。
TCP/IP - 傳輸層 提供主機與主機之間的資料封包傳輸服務。 分為TCP與UDP。 規劃資料封包的資料流量。 規劃資料能正確的抵達到目的地的路徑。 收到的資料封包與發送的資料封包是一致: 遺失的封包重新發送 移除重覆的資料封包 排列正確的資料封包順序 分為TCP與UDP。
TCP/IP - 應用層 網路應用程式負責的程序。 整合了OSI通訊協定模型的應用層、展現層與交 談層。
OSI與TCP/IP
IP封包表頭的結構
TCP封包表頭的結構
UDP封包表頭的結構
TCP通訊協定連線與中斷連線的流程
1-3 IP位址 第一章 TCP/IP網路基本概論
IP位址 IP位址是每一個網路設備的一個編號。 目前IP位址是使用IPv4版本的規格。 由四個位元組所組成。 每個位元組是一個不超過255(8位元,0~255) 的數值。
兩個IP位址是否在同一個網路? 把IP位址與它的網路遮罩來進行AND運算。 計算結果: 兩者的主機號碼若相同,就是在同一個網路。
特定用途的IP位址 第一組數字127 保留給回溯(loopback address) 介面所使用。 私有IP,private IP: 10.X.X.X 172.16.X.X ~ 172.31.X.X 192.168.1.X~192.168.255.X multicast虛擬IP: 224.X.X.X~239.X.X.X
私有IP使用時的注意事項 路由資訊不可以對外散播。 傳送資料封包,不能透過網際網路來轉送。 只限於內部的區域網路所使用。
子網路遮罩(1/2) A級網路: B級網路: C級網路: IP位址第一個位元為0 。 子網路遮罩長度預設為8位元。 則子網路遮罩長度預設為16位元。 C級網路: IP位址前三個位元為110。 子網路遮罩長度預設為24位元。
子網路遮罩(2/2) D級網路: IP位址前四個位元為1110。 子網路遮罩長度預設為32位元。 E級網路: IP位址前四個位元為1111。
網路等級與IP位址 網路等級 IP位址範圍 網路數目 每個網路可分配IP數目 A級網路 1~128.0.0.0 128 254×254×254 B級網路 129~192.1~254.0.0 64×254 254×254 C級網路 193~223.1~254.1~254.0 32×254×254 254 D級網路 224~239.1~254.1~254.0 16×254×254 依子網路遮罩而定 E級網路 240~254.1~154.1~254.0 24×254×254
NAT技術 透過通訊埠的設定,可以將公開IP所接收的資料 封包轉送至內部的私有網路的指定IP位址。 達到一個公開IP大家共享的目的。
路由表 電腦A要傳送資料封包到電腦B: 路徑(Router)。從電腦A經由路由器連接到另 一部電腦B,這個過程稱之為路徑(Router)。 透過路由器將資料封包轉出目前的網路 從路由器找出電腦B的位址 再從電腦B的閘道器將資料封包轉進電腦B的位址。 路徑(Router)。從電腦A經由路由器連接到另 一部電腦B,這個過程稱之為路徑(Router)。
路徑 Router。 從電腦A經由路由器連接到另一部電腦B之過程。
1-4 DNS協定 第一章 TCP/IP網路基本概論
DNS 網域名稱系統,Domain Name Service。 透過DNS伺服器可以查詢網址所對應的主機IP位 址。
DNS機構網域 機構網域 說明 com 公司﹑企業 areo 航空工業 edu 教育﹑學術單位 bit 商業組織 gov 政府機關 coop 公司行號 mil 軍事單位 museum 博物館 展覽單位 net 網路﹑通訊單位 pro 專業人士 int 國際的官方組織 半官方組織 info 提供資訊的網站 org 非營利機構 idv 個人
網域階層架構
1-5 DHCP協定 第一章 TCP/IP網路基本概論
DHCP Dynamic Host Configuration Protocol。 可以自動完成IP配置的協定。 伺服器端:集中管理所有網路設定的資料 客戶端:從DHCP伺服器取得所配置的網路設定: IP位址 網路遮罩 預設閘道DNS伺服器
DHCP運作流程
1-6網路故障偵測 第一章 TCP/IP網路基本概論
檢視網路卡硬體是否正常驅動
檢視網路卡是否正常運作
ipconfig
檢測loopback是否有回應
網路卡驅動程式是否有錯誤?
測試電腦與預設閘道之間是否正常?
測試DNS伺服器
追蹤路由
Telnet:偵測遠端網路服務
第二章 基本網路程式設計 2-1 .NET Framework在網路程式設計上的支援 2-2 分析網路IP位址 2-3偵測遠端主機的狀態 2-4取得主機名稱與位址的關係 2-5 URL與URI
2-1 .NET Framework在網路程式設計上的支援 第二章 基本網路程式設計
.NET Framework命名空間 System.Net System.Net.Configuration System.Net.Mail System.Net.Mime System.Net.NetworkInformation System.Net.PeerToPeer System.Net.Security System.Net.Sockets
System.Net 包含許多的類別,支援許多網路上找得到的通 訊協定。 提供簡單的程式設計介面,讓程式設計師可以 用來發展網路應用程式。
System.Net.Configuration
System.Net.Mail 用來傳送電子郵件給SMTP(Simple Mail Transfer Protocol)電子郵件伺服器。
System.Net.Mime 儲存用來表示Multipurpose Internet Mail Exchange (MIME)標頭的型別。
System.Net.NetworkInformation 提供網路流量資料、網路位址資訊和本機電腦 位址變更告知的存取方式。 實作 Ping 公用程式的類別: 可以使用 Ping 和相關的類別,檢查是否可以透過 網路到達某部電腦。
System.Net.Security 提供網路主機與網路主之間安全的網路資料流 通訊。
System.Net.Sockets 提供Windows Sockets (Winsock) 介面的Managed 實作,以提供TCP/IP的通訊協定應用程式的開發。
典型的網路服務程式架構
客戶端的網路服務介面:TcpClient 定義在System.Net.Sockets的命名空間。 建立客戶端的網路服務介面,以連線至網路伺 服端。
TcpClient類別建立服務介面 Dim MyTcpClient As New TcpClient MyTcpClient.Connect(IP位址或主機名稱, 通訊埠編 號)
TcpClient類別接收與傳送資料 '使用NetworkStream類別來接收與傳送資料 Dim ns As NetworkStream = TcpClient.GetStream '將要傳送的資料編碼 Dim data As Byte() = Encoding.ASCII.GetBytes(要傳 送資料) '傳送資料 ns.Write(data, 0, data.Length)
伺服端的網路介面:TcpListener 定義在System.Net.Sockets的命名空間。 負責接聽來自客戶端的連接。
TcpListener類別-建立伺服端 接聽客戶端IP Address與通訊埠 '建立TcpListener類別 Dim MyTcplistener As New TcpListener(IPAddress類別, 通訊埠編號)
TcpListener類別-伺服端接收資料 '取得客戶端的TcpClient所傳送的資料 Dim ns As NetworkStream = TcpClient.GetStream Dim data(接收資料緩衝區大小) As Byte '讀入傳進的資料的長度 Dim BytesRead As Integer = ns.Read(data, 0, _ CInt(接收資料緩衝區大小)) '將Byte型態轉換為String並顯示在TextBox控制項 TextBox1.Text = Encoding.ASCII.GetString(data, 0, BytesRead)
2-2 分析網路IP位址 第二章 基本網路程式設計
NetworkInterface類別 定義在System.Net.NetworkInformation命名空間。 取得網路介面的組態與統計資訊。
IPAddress類別 定義在System.Net命名空間。 別用來提供網路通訊協定的IP位址。 AddressFamily: IPv4: InterNetwork IPv6: InterNetworkV6
IPInterfaceProperties類別 定義於System.Net.NetworkInformation命名空間。 取得網路卡上的網路資訊: Gatewary DNS
IPGlobalProperties類別 取得網路客戶端與伺服端連接之後,網路介面 所在的電腦主機與伺服端它們之間的相關資訊 主機名稱 網域名稱 TcpConnectionInformation類別的State屬性,可找 出目前TCP連線的狀態。
IPEndPoint類別 定義在System.Net的命名空間。 處理IP位址及服務所需要的通訊埠編號資訊。
2-3偵測遠端主機的狀態 第二章 基本網路程式設計
Ping類別 定義在System.Net.NetworkInformation命名空間。 偵測伺服器主機的IP是否存在於網路上。 傳送ICMP回應訊息給遠端電腦,並從遠端電腦 接收對應的ICMP回應回覆訊息。 ICMP可能被防火牆阻擋。
2-4取得主機名稱與位址的關係 第二章 基本網路程式設計
追蹤DNS伺服器的回應
Dns類別 DNS服務。 定義在System.Net 命名空間。 GetHostName:取得本機電腦的主機名稱。 IPHostEntry 類別:儲存網路主機名稱解析後的IP 位址。
2-5 URL與URI 第二章 基本網路程式設計
網址URL Uniform Resource Locator。 資源定位器。 目的: 存取網路上特定的資源,不管是內部區域網路或廣 域的網際網路。
URL與網路通訊協定 根據特定服務資源,針對特定服務,制定專屬 的「URL」通訊格式,即「通訊協定」。 URL與通訊協定 說明 ftp://xxx.xxx.com 檔案傳輸協定 http://xxx.xxx.com 超文字傳輸協定(HTML) mailto:benny@myemail.com.tw 郵件傳輸協定 bbs://xxx.xxx.com 電子佈告欄傳輸協定 news.hinet.net 新聞群組
URL的格式 通訊協定://主機位址/虛擬目錄/資源?參數 http://www.codes.com.tw/index.html http:// 218.210.8.100/index.html http://www.codes.com.tw/Product/ItemNo?T61 http://218.210.8.100/Product/ItemNo?T61
URI Uniform Resource Identifier。 一致性資源識別碼。 透過「URI」的通訊協定,可將網路指向任何IP 網址,任何連結、任何檔案…等的任何資訊。
URI的格式 通訊協定://主機名稱:通訊埠編號/目錄路徑/檔 案名稱(參數) http://www.chippower.com.tw/en/product.html?str7 10f
URI類別 CheckSchemaName: CheckHostName: 判斷Uri的名稱是否正確。
第三章 資料的傳收與接送 3-1 TCP程式設計 3-2 UDP程式設計 3-3 Socket程式設計 3-4資料的非同步傳送與接收
3-1 TCP程式設計 第三章 資料的傳收與接送
TCP/IP網路程式的架構
建立伺服端與接收資料 '建立TcpListener類別 TcpListener = New TcpListener IPAddress類別,通訊埠) MyTcpListener.Start() '接受客戶端的TcpClient服務 Dim TcpClient As TcpClient = MyTcpListener.AcceptTcpClient() '取得來自客戶端的IP Address Dim clientIP As IPAddress = IPAddress.Parse( CType(MyTcpListener.LocalEndpoint, _ IPEndPoint).Address.ToString()) '取得客戶端的TcpClient所傳送的資料 Dim ns As NetworkStream = MyTcpClient.GetStream Dim data(MyTcpClient.ReceiveBufferSize) As Byte '讀入傳進的資料的長度 Dim BytesRead As Integer = ns.Read(data, 0 , CInt( MyTcpClient.ReceiveBufferSize)) '將Byte型態轉換為String 接收資料=Encoding.Default.GetString(data, 0, BytesRead))
連接至伺服端與傳送資料 '連接至伺服端 TcpClient.Connect(IP位址, 通訊埠) '使用NetworkStream類別來接收與傳送資料 Dim ns As NetworkStream = TcpClient.GetStream '使用預設的編碼方式來將傳送資料編碼 Dim data As Byte() = Encoding.Default.GetBytes(要傳送 的資料封包) '傳送資料 ns.Write(data, 0, data.Length)
SocketException類別 SocketErrorCode: 僅陳述當時網路環境的狀況,並不全然是程式 所造成的錯誤。 說明屬於哪一種型態的錯誤,讓程式設計師來判斷 發生錯誤的原因,並做進一步的處理。 僅陳述當時網路環境的狀況,並不全然是程式 所造成的錯誤。
Encoding類別 替資料流位元組進行編碼。 ASCII 取得ASCII字元集的編碼方式。 BigEndianUnicode 取得UTF-16格式的編碼方式,它是以位元組由大到小位元組順序來排列。 Default 取得目前作業系統的編碼方式。 Unicode 取得UTF-16格式的編碼方式,它是以位元組由小到大位元組順序來排列。 UTF32 取得UTF-32格式的編碼方式,它是以位元組由小到大位元組順序來排列。 UTF7 取得UTF-7格式的編碼方式。 UTF8 取得UTF-8格式的編碼方式。
NetworkStream:非同步讀取資料 BeginRead方法。 TcpClient.GetStream.BeginRead( _ 接收的資料, 開始讀取位置, 讀取長度, AddressOf 指派程序, Nothing) clientTCP.GetStream.BeginRead( data, 0, _ CInt(clientTCP.ReceiveBufferSize), _ AddressOf ReceiveMessage, Nothing)
NetworkStream:停止非同步讀取 EndRead方法。 資料長度 =TcpClientTCP.GetStream.EndRead( IAsyncResult) 讀取資料=Encoding.Default.GetString(接收資料, 開 始位置, 資料長度)
NetworkStream程式碼範例 Me.Invoke(New 指派程序宣告名稱(AddressOf Me. 程序名稱), 參數) '指派程序宣告 Public Delegate Sub 指派程序宣告名稱(參數) Public Sub 程序名稱(參數) '要處理的事 End Sub
3-2 UDP程式設計 第三章 資料的傳收與接送
UdpClient類別 定義在System.Net.Sockets的命名空間。 為一個不可靠的傳輸協定: 傳送資料後,並不會去確認對方是否有收到完整的 資料。 接收資料的客戶端,也不會去考慮所收到的資料是 否正確?完整?重覆接收?
建立UdpClient類別 '僅初始化UdpClient Dim udpClient As New UdpClient() '連接至本機通訊埠 Dim udpClient As New UdpClient(通訊埠) '連接至本機 Dim udpClient As New UdpClient(AddressFamily家族) '連接至指定IP與通訊埠 Dim udpClient As New UdpClient(IPEndPoint類別) Dim udpClient As New UdpClient(通訊埠, AddressFamily家族) '連接至指定主機名稱與通訊埠 Dim udpClient As New UdpClient(主機名稱, 通訊埠)
UdpClient連接至伺服器 '連接至指定IP與通訊埠 UdpClient.Connect(IPEndPoint類別) UdpClient.Connect(IPAddress類別, 通訊埠) '連接至指定主機名稱與通訊埠 UdpClient.Connect(主機名稱, 通訊埠)
UdpClient傳送資料至伺服器 '已連接至伺服器 UdpClient.Send(傳送資料位元組陣列, 傳送資料的 長度) '尚未連接至伺服器 UdpClient.Send(傳送資料位元組陣列, 傳送資料的 長度, IPEndPoint類別) UdpClient.Send(傳送資料位元組陣列, 傳送資料的 長度, 主機名稱, 通訊埠)
UdpClient接收伺服器的資料 UdpClient.Receive(伺服器的IPEndPoint類別) 關閉UdpClient通訊 UdpClient.Close()
接收端與發送端的通訊埠與IP位址
3-3 Socket程式設計 第三章 資料的傳收與接送
Socket應用程式的架構
Socket程式的作業流程
建立Socket類別 DIM SocketServer AS New Socket(通訊協定家族, 通 訊端類型, 通訊協定) DIM SocketServer AS = New Socket( _ AddressFamily.InterNetwork, _ SocketType.Stream, ProtocolType.Tcp)
將IP位址、通訊埠與Socket物件繫結 Dim ep As New IPEndPoint(IPAddress.Parse(IP位址), 通訊埠) SocketServer.Bind(ep) Dim ep As New IPEndPoint( IPAddress.Parse("127.0.0.1"), 5001)
開啟Socket物件的接聽功能 SocketServer.Listen(最大連接數) SocketServer. Listen(9)
建立客戶端Socket物件 DIM SocketClient AS New Socket(通訊協定家族, 通訊端類型, 通訊協定) Dim ep As New IPEndPoint(IPAddress.Parse(IP位址), 通訊埠) SocketClient.Connect(ep) DIM SocketClient AS New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) Dim ep As New IPEndPoint(IPAddress.Parse("127.0.0.1"), 5001)
伺服端Socket接受客戶端Socket連接 Dim SocketClient As Socket SocketClient = SocketServer.Accept()
Socket類別傳送資料 SocketClient.Send(Encoding.Default.GetBytes("傳送資 料"))
Socket類別接收資料 Dim RecvLength As Integer Dim RecvStr As String RecvLength = SocketClient.Receive(data) If RecvLength > 0 Then RecvStr = Encoding.Default.GetString(data).Trim End If
關閉已開啟的Socket通訊 SocketServer.Close 暫停通訊 Receive 暫停接收資料。 Send 暫停傳送資料。 Shutdown Receive 暫停接收資料。 Send 暫停傳送資料。 Both 暫停接收和傳送資料。
3-4資料的非同步傳送與接收 第三章 資料的傳收與接送
Socket類別非同步接受連接 '建立委派 Accept = New AsyncCallback(AddressOf OnAccept) '開始準備接收客戶端Socket連接 SocketServer.BeginAccept(Accept, SocketServer) Public Sub OnAccept(ByVal ar As IAsyncResult) '接受客戶端連入 SocketClient = SocketServer.EndAccept(ar) End Sub
Socket類別非同步接收資料 '建立委派 ReceiveData = New AsyncCallback(AddressOf OnReceive) '開始接受客戶端Socket傳送資料 SocketClient.BeginReceive(data, 0, data.Length, SocketFlags.None, _ ReceiveData, SocketClient) Public Sub OnReceive(ByVal ar As IAsyncResult) '完成接收資料 recvLength = AcceptClient.EndReceive(ar) '繼續開始接收資料 SocketClient.BeginReceive( data, 0, data.Length, SocketFlags.None , _ End Sub
Socket類別非同步傳送資料 '建立委派 SendData = New AsyncCallback(AddressOf OnSend) '開始傳送資料 SocketClient.BeginSend(byteSend, 0, byteSend.Length, _ SocketFlags.None, SendData, SocketClient) Public Sub OnSend(ByVal ar As IAsyncResult) '結束傳送資料 SocketClient.EndSend(ar) End Sub
客戶端Socket非同步連接至伺服端Socket '建立委派 Connect = New AsyncCallback(AddressOf OnConnect) '開始連接至Socket伺服端 SocketClient.BeginConnect(IPEndPoint, Connect, SocketClient) Public Sub OnConnect(ByVal ar As IAsyncResult) '結束連接至Socket伺服端 SocketClient.EndConnect(ar) End Sub
第四章 瀏覽器 4-1 HTTP通訊協定 4-2 請求與回應 4-3瀏覽器
4-1 HTTP通訊協定 第四章 瀏覽器
瀏覽網頁 使用WWW(World Wide Web)的應用。 HTTP(Hyper Text Transfer Protocol)。 MIME(Multipurpose Internet Mail Extension)。 URL(Uniform Resource Locator)。 URI(Uniform Resource Identifier)。
HTTP通訊協定 用戶端瀏覽器與網站伺服器之間的溝通標準。 定義在網路的應用層。 用戶端發出瀏覽網頁的需求,經由TCP的連線, 傳送至Web Server,並回應適當的HTTP訊息。 HTTP通訊協定可以: 瀏覽文字、影像與HTML等靜態網頁。 可在網頁嵌入Plug In元件,JAVA元件與AJAX技術, 讓網頁從靜態網頁動態網頁主動式網頁。
HTTP標題資訊 先把HTTP請求轉換標題資訊傳送至網站伺服器 去處理。 GET / HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* Accept-Language: zh-tw Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705) Host: 127.0.0.1:90 Connection: Keep-Alive
HTTP方法 HTTP通訊協定版本 HTTP方法 0.9 GET 1.0 GET、HEAD、POST 1.1 CONNECT、DELETE、GET、 HEAD、OPTIONS、POST、 PUT、TRACE
HTTP通訊協定的訊息代碼 HTTP訊息編碼 訊息意義 100–199 一般訊息,用戶端的需求,伺服端已經收到,可以繼續接下來的動作。 200–299 用戶端的需求已經處理成功。 300-399 用戶端或伺服端的動作或需求,必須導向(Redirection)到另外一個地方。 400-499 用戶端發生錯誤的HTTP請求。 500-599 伺服端發生內部處理的錯誤。
4-2 請求與回應 第四章 瀏覽器
網路的請求與回應的模型
WebRequest與WebResponse 定義在System.Net的命名空間。 WebRequest類別: 處理用戶端的需求。 WebResponse類別: 伺服端的回應。
使用WebRequest與WebResponse來取得指定網址的內容 '設定網站伺服器的網址 Dim request As WebRequest = WebRequest.Create(WebSiteTextBox.Text) '設定逾時時間(毫秒) request.Timeout = 10000 '取得回應物件 Dim response As WebResponse = request.GetResponse '取得回應的資料流 Dim content As Stream = response.GetResponseStream Dim data(256) As Byte Dim HtmlPageContent As String = "" Dim dataRead As Integer = 0 '開始讀取資料 Do dataRead = content.Read(data, 0, 256) HtmlPageContent += Encoding.Default.GetString(data, 0, 256) Loop While dataRead > 0
WebClient類別 義在System.Net命名空間。 用來對指定的URI資源,進行關連的內容之上傳 或下載。 可替代WebRequest類別與WebResponse類別,實 作網頁內容下載的方法。
使用WebClient類別下載網頁內容 '建立WebClient類別的執行個體 Dim myWebClient As New WebClient() '下載網頁的資料 Dim myDatabuffer As Byte() = myWebClient.DownloadData(顯示物件)
使用WebClient類別下載資源 ‘建立WebClient類別的執行個體 Dim MyWebClient As New WebClient() ‘下載資源 MyWebClient.DownloadFile(下載資源, 儲存檔名)
4-3瀏覽器 第四章 瀏覽器
WebBrowse類別 從.NET Framework 2.0開始支援。 定義在System.Windows.Forms的命名空間。 實作瀏覽器。
第五章 電子郵件 5-1 電子郵件服務 5-2 .NET Framework在電子郵件服務上的支援 5-3使用Outlook來發送電子郵件
5-1 電子郵件服務 第五章 電子郵件
電子郵件服務(1/2) 架構在TCP/IP通訊協定的應用層之服務。 SMTP(Simple Mail Transfer Protocol,簡易電子 郵件協定) 。 POP(Post Office Protocol,郵局協定) 。 IMAP(Internet Message Access Protocol,網際訊 息存取協定) 。 MIME(Multipurpose Internet Mail Extensions,多 用途網際郵件擴充)。
電子郵件服務(2/2) 較常用的電子郵件服務為SMTP協定與POP協定: SMTP協定: POP協定: 使用預設的25通訊埠用來負責郵件的遞送服務。 又稱為「外寄郵件伺服器」(SMTP伺服器)。 POP協定: 使用預設的110通訊埠用來負責郵件的接收服務。 提供收信服務的電子郵件伺服器,又稱為「內送郵件伺 服器」(POP3伺服器)
SMTP寄送郵件與POP接收郵件
SMTP協定常用的指令 HELLO <電子郵件伺服器名稱> 告訴電子郵件伺服器寄件人的身分,進行連線的流程。 MAIL FROM<電子郵件地址> 寄件人的電子郵件地址。 RCPT TO<電子郵件地址> 收件人的電子郵件地址。 DATA 電子郵件的內容 RSET 中斷電子郵件的傳遞服務,放棄傳遞的郵件內容。 VRFY 驗證電子郵件收件者的名稱是否正確。 EXPN 展開電子郵件的收件人的郵寄清單,並確認名稱是否正確。 HELP 請求線上幫助。 QUIT 結是SMTP協定所提供的服務。
電子郵件的格式
電子郵件的傳送流程
常用的POP3通訊協定指令 USER <使用者帳號> 電子郵件信箱的擁有者帳號。 PASS <使用者密碼> 電子郵件信箱的擁有者密碼。 STAT 取得尚未讀取的訊息大小(位元組)。 RETR < x > 取出第x筆的電子郵件訊息。 DELE < x > 刪除第x筆的電子郵件訊息。 LAST 取得最後一次存取的電子郵件訊息編號。 LIST < x > 取出第x筆的電子郵件訊息的大小。 RSET 救回所有已經刪除的電子郵件訊息,並把編號重設為1。 TOP < x >< y > 取得第x筆電子郵件訊息的標頭與第y行的內容。 QUIT 結束POP3的連線。
電子郵件的接收流程
5-2 .NET Framework在電子郵件服務上的支援 第五章 電子郵件
System.Net.Mail命名空間(1/3) AlternateView:電子郵件訊息的檢視格式。 AlternateViewCollection : AlternateView物件的集合。 Attachment :電子郵件的附件。 AttachmentBase :電子郵件附件的基底類別。Attachment、 Alternateview 和 LinkedResource 類別都衍生自這個類別。 AttachmentCollection :儲存要當做電子郵件訊息一部分傳送的 附件。 LinkedResource :表示電子郵件附件中的內嵌外部資源,例如 HTML 附件中的影像。 LinkedResourceCollection :儲存要當做電子郵件訊息一部分傳送 的連結資源。
System.Net.Mail命名空間(2/3) MailAddress :電子郵件寄件者或收件者的地址。 MailAddressCollection :儲存與電子郵件訊息有關的 所有電子郵件地址。 MailMessage :使用 SmtpClient類別傳送的電子郵件 訊息。 SmtpClient :應用程式使用SMTP通訊協定傳送電子 郵件。 SmtpException :當應用程式無法在SmtpClient類別完 成電子郵件的投遞作業時,所引發的例外狀況。
System.Net.Mail命名空間(3/3) SmtpFailedRecipientException :當SmtpClient類別 無法對特定的收件者完成電子郵件的投遞作業 時,所引發的例外狀況。 SmtpFailedRecipientsException :使用SmtpClient類 別傳送電子郵件時,無法投遞至所有的收件者 時,所引發的例外狀況。 SmtpPermission :控制SMTP伺服器的存取權限。 SmtpPermissionAttribute :控制SMTP伺服器的存 取屬性。
使用MailAddress類別 '第一種方式 Dim ToAddress As New MailAddress("benny@myemail.com.tw") '第二種方式 Dim ToAddress As New MailAddress("benny@myemail.com.tw", _ "陳惟彬")
使用MailMessage類別來處理寄件人與收件人 '第一種方式 '寄件人 Dim FromAddress As New MailAddress("benny@myemail.com.tw") '收件人 Dim ToAddress As New MailAddress("grace@myemail.com.tw") '處理電子郵件的寄件人與收件人 Dim mail As New MailMessage(FromAddress, ToAddress) ' '第二種方式 Dim mail As New MailMessage("benny@myemail.com.tw", _ "grace@myemail.com.tw")
使用MailMessage類別來處理副本收件人與密件副本收件人 '副本 Dim cc As New MailAddress("service@myemail.com.tw") MailMessage.CC.Add(cc) '密件副本 Dim bcc As New MailAddress("manager@myemail.com.tw") MailMessage.Bcc.Add(bcc)
使用MailMessage類別來處理回覆的電子郵件地址 Dim ReplyTo As New MailAddress("benny@myemail.com.tw") MailMessage.ReplyTo = ReplyTo
使用MailMessage類別來處理主旨與內文 '電子郵件的優先等級 mail.Priority = MailPriority.High '電子郵件主旨 mail.Subject = "這是測試電子郵件的主旨" '電子郵件內文 mail.Body = "這是測試電子郵件的內文!" '回覆電子郵件 Dim ReplyToAddress As New MailAddress("grace@myemail.com.tw") '回覆地址 mail.ReplyTo = ReplyToAddress
使用Attachment類別 '附件 - 帶入檔案名稱 Dim attach As New Attachment("C:\Test.txt") '附件的MIME格式 Dim attachType As ContentType = New ContentType( MediaTypeNames.Text.Plain) '附件 - 帶入檔案名稱與媒體形式 Dim attach As New Attachment("C:\Test.txt", attachType)
將Attachment加入MailMessage '將附件加入MailMessgae類別 mail.Attachments.Add(attach)
建立SmtpClient類別 '使用預設的通訊埠25 Dim smtp As New SmtpClient("myemail.com.tw") '使用特定的通訊埠 Dim smtp As New SmtpClient("myemail.com.tw", 5001)
SmtpClient類別的Send方法 SmtpClient.Send(MailMessage) SmtpClient.Send(strForm, strRecipients, strSubject, strBody)
建立NetworkCredential類別 'SMTP伺服器的認證資訊1 smtp.Credentials = New NetworkCredential(使用者 名稱, 密碼) 'SMTP伺服器的認證資訊2 smtp.Credentials = New NetworkCredential(使用者 名稱, 密碼, 網域)
5-3使用Outlook來發送電子郵件 第五章 電子郵件
加入Microsoft.Office.Interop.Outlook參考
建立Outlook應用程式物件 Dim app As Microsoft.Office.Interop.Outlook.Application
建立並取得所需的命名空間 Dim NameSpace As Microsoft.Office.Interop.Outlook._NameSpace NameSpace = app.GetNamespace("MAPI")
登入應用程式 NameSpace.Logon(Profile, Password, ShowDialog, NewSession) 參數名稱 資料型態 說明 Profile string 登入應用程式的用戶名稱,如果要使用應用程式的預設權限,則此欄位保持空白。 Password 登入應用程式的密碼,如果要使用應用程式的預設權限,則此欄位保持空白。 ShowDialog Boolean 是否顯示登入的視窗。 NewSession 是否額外在建立一個執行介面。
建立Folder Dim objFolder As Outlook.MAPIFolder objFolder = NameSpace.GetDefaultFolder( _ Outlook.OlDefaultFolders.olFolderToDo) objFolder.Display()
建立PostItem Dim post As Outlook.PostItem post = app.CreateItem(Outlook.OlItemType.olPostItem) post.Display()
第六章 檔案上傳與下載 6-1 FTP通訊協定 6-2 FTP指令 6-3 使用TcpClient來與FTP伺服器進行交談 6-4 FtpWebRequest與FtpWebResponse 6-5 使用WebClient類別來傳送與接收資料
6-1 FTP通訊協定 第六章 檔案上傳與下載
FTP通訊協定 File Transfer Protocol,檔案傳輸通訊協定。 提供網路的客戶端將檔案上傳至伺服端或從伺 服端下載檔案至客戶端的平台。 FTP通訊協定是以TCP傳輸協定為基礎的應用。
FTP的架構
FTP伺服端模組與FTP客戶端模組
6-2 FTP指令 第六章 檔案上傳與下載
FTP客戶端交談指令(1/4) ! 執行本機命令,如「! Dir」就是執行dos模式的dir命令。 ? 顯示命令的說明(help),如「? dir」。 append 附加到檔案。 ascii 設定傳輸類型為ascii模式。 bell 命令完成時,發出嗶一聲。 binary 設定傳輸類型為二進位模式。 bye 終止FTP工作階段並結束。 cd 切換伺服器的工作目錄。 close 終止FTP工作階段。
FTP客戶端交談指令(2/4) delete 刪除FTP伺服器的檔案。 debug 進入偵錯模式。 dir disconnect 終止FTP工作階段。 get 下載一個檔案。 glob 切換本機檔案名稱的metacharacter延伸。 hash 切換是否要列印代表每個以傳輸之緩衝區的「#」。 help 顯示命令的說明,與「?」功能相同。 lcd 變更本機工作目錄。 literal 傳送自訂的FTP命令。 ls 列出FTP伺服器工作目錄下的檔案和目錄清單(簡單資料)。
FTP客戶端交談指令(3/4) mdelete 刪除多個遠端檔案。 mdir 列出多個遠端目錄的內容。 mget mkdir 在FTP伺服器建立目錄。 mls mput 上傳多個檔案到FTP伺服器。 open 連線到FTP伺服器。 prompt 在多個命令強制互動式提示。 put 上傳一個檔案到FTP伺服器。 pwd 顯示目前FTP伺服器的工作目錄。 quit 終止FTP工作階段並結束。 quote 傳送自訂的FTP命令。
FTP客戶端交談指令(4/4) recv 接收檔案。 remotehelp 從FTP伺服器取得說明。 rename 重新命名檔案。 rmdir 刪除FTP伺服器上的目錄。 send 傳送一個檔案。 status 顯示目前連線的狀態。 trace 切換封包追蹤。 type 設定檔案傳輸模式。 user 傳送新的登入FTP伺服器的使用者資訊。 verbose 切換詳細資訊模式。
FTP伺服端指令 USER PORT STOR MSAM RNTO NLST MKD CDUP PASS PASV APPE MRSQ ABOR SITE XMKD XCUP ACCT TYPE MLFL MRCP DELE SYST RMD STOU SMNT STRU MAIL ALLO CWD STAT XRMD SIZE REIN MODE MSND REST XCWD HELP PWD MDTM QUIT RETR MSOM RNFR LIST NOOP XPWD
客戶端FTP指令與伺服端FTP指令 客戶端 FTP伺服端 說明 user USER 使用者帳號。 bye QUIT 登出FTP伺服器。 ascii TYPE A ASCII模式。 binary TYPE I Binary模式。 get RETR 下載檔案。 put STOR 上傳檔案。 dir LIST 瀏覽FTP伺服器目錄與檔案。 cd CWD 變更FTP伺服器工作目錄。 pwd XPWD 顯示FTP伺服器目前的工作目錄 。
FTP伺服器的存取控制指令 USER 使用者登入指令,如USER benny,表示以使用者名稱benny登錄 FTP伺服器。 PASS QUIT 離開並關閉與FTP伺服器的連線。
FTP伺服器回應訊息的第一個數字 1 指令已被FTP伺服器接受,尚未處理中。 2 指令已被FTP伺服器接受,且正常處理完畢。 3 4 指令處理錯誤(暫時)。 5 指令處理錯誤(永久)
FTP伺服器回應訊息的第二個數字 指令語法錯誤。 1 FTP伺服器回應的訊息。 2 FTP伺服器回應與控制連線或資料連線有關的訊息。 3 指令語法錯誤。 1 FTP伺服器回應的訊息。 2 FTP伺服器回應與控制連線或資料連線有關的訊息。 3 FTP伺服器回應與使用者認證有關的訊息。 4 尚未定義。 5 FTP伺服器回應與檔案有關的訊息。
FTP伺服器常見的回覆訊息(1/2) 125 資料連線已完成,可開始傳輸資料。 200 通訊埠設定完成命令執行正常。 214 help訊息回覆。 220 FTP伺服器的歡迎訊息。 221 連線終止回覆。 225 資料連線開起正常,還未傳輸資料。 226 資料傳輸完畢。 230 使用者登錄完成。 250 要求檔案動作正常,處理完成。
FTP伺服器常見的回覆訊息(2/2) 331 使用者名稱已確定,要求輸入密碼。 421 終止目前的連線。 425 不能開啟資料連線 452 寫入檔案錯誤。 501 語法錯誤(参數值無效)。 530 登入的使用者資訊認證失敗,無法登入至FTP伺服器。 550 FTP伺服器找不到指定的檔案。
6-3 使用TcpClient來與FTP伺服器進行交談 第六章 檔案上傳與下載
6-4 FtpWebRequest與FtpWebResponse 第六章 檔案上傳與下載
建立FtpWebRequest類別的程式碼 '定義FtpWebRequest類別 Dim request As FtpWebRequest '建立FtpWebRequest request = CType(FtpWebRequest.Create(Uri類別), FtpWebRequest)
驗證登入FTP伺服器的使用者與密碼 FtpWebRequest.Credentials = _ New NetworkCredential(使用者帳號, 密碼)
建立FtpWebRequest類別的程式碼 '建立FtpWebResponse類別 Dim response As FtpWebResponse '取得FTP伺服器的回應 response = CType(FtpWebRequest.GetResponse, FtpWebResponse)
6-5 使用WebClient類別來傳送與接收資料 第六章 檔案上傳與下載
使用WebClient類別上傳檔案 '建立WebClient類別 Dim FtpWebClient As New WebClient '上傳檔案(URI Ex: ftp://localhost/Document.txt) FtpWebClient.UploadFile(FTP伺服器的URI, 上傳檔案 的檔名)
使用WebClient類別下載檔案 '建立WebClient類別 Dim FtpWebClient As New WebClient '下載檔案(URI Ex: ftp://localhost/Document.txt) FtpWebClient.DownloadFile(FTP伺服器的URI, 下載檔 案要儲存的檔名)
第七章 元氣聊天室 7-1元氣聊天室程式架構 7-2元氣聊天室伺服器程式設計 7-3元氣聊天室客戶端程式設計 7-4製作元氣聊天室安裝程式
7-1元氣聊天室程式架構 第七章 元氣聊天室
元氣聊天室的系統架構
使用者登入聊天伺服器所送出的封包格式 欄位名稱 長度 說明 命令代碼 2 01。 欄位間隔 1 ASCII碼10的字元(line feed,LF)。 暱稱 暱稱的長度 Benny,長度就是5。
伺服器廣播使用者登入的訊息給所有在聊天室成員的封包格式 欄位名稱 長度 說明 命令代碼 2 02。 欄位間隔 1 ASCII碼10的字元(line feed,LF)。 暱稱 暱稱的長度 Benny,長度就是5。
要求伺服器傳送聊天室的成員清單的封包格式 欄位名稱 長度 說明 命令代碼 2 03。 欄位間隔 1 ASCII碼10的字元(line feed,LF)。 暱稱 暱稱的長度 Benny,長度就是5。
伺服器傳送聊天室的成員清單的封包格式 欄位名稱 長度 說明 命令代碼 2 04。 欄位間隔 1 ASCII碼10的字元(line feed,LF)。 成員數 n 表示後續要傳送成員的數量。如果為2名,長度就是1,如果為15名,長度就是2。 暱稱 暱稱的長度 Benny,長度就是5。 …
使用者登出聊天伺服器所送出的封包格式 欄位名稱 長度 說明 命令代碼 2 05。 欄位間隔 1 ASCII碼10的字元(line feed,LF)。 暱稱 暱稱長度 Benny,長度就是5。
伺服器廣播使用者登入的訊息給所有在聊天室的封包格式 欄位名稱 長度 說明 命令代碼 2 06。 欄位間隔 1 ASCII碼10的字元(line feed,LF)。 暱稱 暱稱長度 Benny,長度就是5。
使用者發送聊天訊息給指定的朋友的封包格式 欄位名稱 長度 說明 命令代碼 2 07。 欄位間隔 1 ASCII碼10的字元(line feed,LF)。 發送訊息者暱稱 暱稱長度 <Benny>,長度就是7。 接受者人數 n 表示接受成員的人數。如果傳送給3名,長度就是1,如果為12名,長度就是2。 接受訊息者暱稱 接受者暱稱長度 Sam,長度就是3。 … 訊息內容 訊息內容的長度 Hello!,長度就是6。
伺服器廣播使用者登入的訊息給所有在聊天室的成員之封包格式 欄位名稱 長度 說明 命令代碼 2 08。 欄位間隔 1 ASCII碼10的字元(line feed,LF)。 發送訊息者暱稱 暱稱長度 Benny,長度就是5。 接受訊息者暱稱 接受者暱稱長度 Sam,長度就是3。 訊息內容 訊息內容的長度 Hello!,長度就是6。
7-2元氣聊天室伺服器程式設計 第七章 元氣聊天室
每個客戶端都是一個TcpClinet類別
聊天室伺服端的運作流程
7-3元氣聊天室客戶端程式設計 第七章 元氣聊天室
元氣聊天室的運作流程
製作元氣聊天室安裝程式 第七章 元氣聊天室
修改部署專案的屬性 部署專案屬性 新的設定值 Author 陳惟彬 Description 使用微軟Visual Studio 2008所發展的系統 Manufacturer 文魁資訊股份有限公司 ManufacturerUrl http://www.kingsinfo.com.tw ProductName 元氣聊天室 Subject 供讀者學習使用 SupportPhone (02)2383-0383 SupportUrl Title 統一元氣館
第八章 居家保全系統 8-1 甚麼是保全系統? 8-2居家保全系統規格設計 8-3居家保全系統程式設計 8-4居家保全系統客戶主機模擬程式 8-5居家保全系統測試
8-1 甚麼是保全系統? 第八章 居家保全系統
保全的定義 某個被戒備的標的遭逢外力破壞時,可藉由保 全的介入處理來減少損失。 保全可以有效阻止外力的破壞。 保全可以用來協助對人們的生命或財產的安全 提供戒護,若生命的安全或財產遭逢不可抗拒 的外力之侵襲,則保全可以用它專業的設備與 人力來讓傷害、損失減到最低。
保全業提供的服務 系統保全:居家、辦公室等建築物與週邊防護、 防盜。 駐警(衛)保全:門禁管制、訪客與員工之門 禁識別、駐衛人員崗哨與巡邏等等。 運鈔:現金及貴重物品遞送。 人身保護:警衛、保鑣。 其他:警報、監視系統、電話通報、消防系 統…等。
8-2居家保全系統規格設計 第八章 居家保全系統
保全主機的規格 項目 說明 保全迴路 6個。 保全啟動解除鎖 1個。 通訊媒介 ADSL。 磁卡 2片。 可執行的功能 保全主機戒護啟動。 保全主機戒護解除。
保全迴路可以使用的偵測器 偵測器種類 磁磺開關 玻璃破碎偵測器 空間偵測器 煙霧偵測器
保全主機傳送到管制主機的訊息 設定或修改保全主機的參數。 上傳保全主機所連接的偵測器所發報的訊息。 上傳啟動(解除)保全主機的戒護狀態。 上傳線路測試的訊息。 上傳保全主機的狀態。
管制主機的規格 項目 說明 可連接的保全主機數量 100部。 可執行的功能 透過ADSL線路來啟動保全主機的戒護狀態。 偵測保全線路是否暢通。 關閉警報喇叭。
管制主機傳送到保全主機的訊息 訊息清單 保全主機戒護啟動。 保全主機戒護解除。 關閉警報器。 查詢保全主機狀態。
居家保全系統-命令內容 命令代碼 命令說明 上 傳 命 令 11 上傳設定或修改保全主機的參數。 12 上傳保全主機所連接的偵測器所觸發的訊息。 13 上傳啟動(解除)保全主機的戒護狀態。 14 上傳線路測試的訊息。 15 對命令25回覆。 16 對命令26回覆。 17 對命令27回覆。 18 上傳查詢保全主機的狀態。 下 載 21 對命令11回覆。 22 對命令12回覆。 23 對命令13回覆。 24 對命令14回覆。 25 下傳啟動(解除)保全主機的戒護狀態。 26 下傳關閉警報器。 27 下傳查詢保全主機狀態的命令。 28 對命令18回覆。
保全主機與管制主機命令封包傳遞
保全系統資料庫的資料表關連圖
8-3居家保全系統程式設計 第八章 居家保全系統
居家保全系統管制主機的程式架構
8-4居家保全系統客戶主機模擬程式 第八章 居家保全系統
居家保全系統的客戶主機方塊圖
客戶主機模擬程式的方塊圖
居家保全系統客戶主機的運作架構
8-5居家保全系統測試 第八章 居家保全系統
管制主機與客戶端皆在同一個內部網路的系統架構
管制主機讓廣域網路的客戶端連接的系統架構