




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第十一章 系統(tǒng)升級系統(tǒng)升級章節(jié)任務(wù)任務(wù):升級更新系統(tǒng)任務(wù):升級更新系統(tǒng)章節(jié)目標l了解組網(wǎng)、多線程及委托的知識l學(xué)習(xí)如何通過Winform訪問 Internetl掌握套接字編程 系統(tǒng)做好之后,還需不斷的維護。本章所做的升級程序能使用戶方便地更新客戶端系統(tǒng),使維護更加方便。10.1 背景知識介紹1 組網(wǎng) 組網(wǎng)是將許多設(shè)備(如計算機、打印機和工作站)連接成一個網(wǎng)絡(luò)以共享資源。如圖所示,將一臺打印機物理連接至某臺計算機,然后將所有的計算機連接后組成一個網(wǎng)絡(luò)。這樣,每臺計算機通過網(wǎng)絡(luò)都可以共享這臺打印機,從而減少了成本,節(jié)約了費用。 在該網(wǎng)絡(luò)中,直接連接打印機的計算機是服務(wù)器,其它計算機是客戶端,二者是
2、提供服務(wù)和享有服務(wù)的關(guān)系。2 統(tǒng)一資源標識符.NET 框架使用統(tǒng)一資源標識符 (URI) 來標識圖所請求的 Internet 資源和通訊協(xié)議。URI 至少由三個(也可能是四個)片段組成:方案標識符(標識用于請求和響應(yīng)的通訊協(xié)議)、服務(wù)器標識符(由域名系統(tǒng) (DNS) 主機名或 TCP 地址組成,用于唯一標識 Internet 上的服務(wù)器)、路徑標識符(定位服務(wù)器上請求的信息)以及可選的查詢字符串(將信息從客戶端傳送到服務(wù)器)。3 Internet 應(yīng)用程序 Internet 應(yīng)用程序大體上分為兩類:客戶端應(yīng)用程序和服務(wù)器應(yīng)用程序。典型的 Internet 客戶端-服務(wù)器應(yīng)用程序是萬維網(wǎng),在萬維
3、網(wǎng)中,人們使用瀏覽器來訪問世界各地的 Web 服務(wù)器上存儲的文檔和其他數(shù)據(jù)。應(yīng)用程序并不限于僅充當其中的一個角色;例如,大家所熟悉的中間層應(yīng)用程序服務(wù)器通過請求其他服務(wù)器的數(shù)據(jù)來響應(yīng)客戶端的請求,在這種情況中,它既作為服務(wù)器,也作為客戶端??蛻舳藨?yīng)用程序通過標識所請求的 Internet 資源以及用于該請求和響應(yīng)的通訊協(xié)議來發(fā)出請求。如有必要,客戶端還提供完成請求所需的任何附加數(shù)據(jù),例如代理位置或身份驗證信息(用戶名、密碼等)。只要構(gòu)成了請求,就可以將該請求發(fā)送到服務(wù)器。 4 多線程 (1)基本概念 進程是指在系統(tǒng)中正在運行的一個應(yīng)用程序。進程包括運行中的程序和程序所使用到的內(nèi)存和系統(tǒng)資源,一
4、個進程是由多個線程組成的。 線程:線程是程序中的一個執(zhí)行流,每個線程都有自己的專有寄存器(棧指針、程序計數(shù)器等),但代碼區(qū)是共享的,即不同的線程可以執(zhí)行同樣的函數(shù)。 多線程:一個進程至少包括一個線程,通常將該線程稱為主線程。一個進程從主線程的執(zhí)行開始進而創(chuàng)建一個或多個附加線程,就是所謂基于多線程的多任務(wù)。 (2) 多線程的優(yōu)劣 優(yōu)點:可以提高CPU的利用率。在多線程程序中,一個線程必須等待的時候,CPU可以運行其它的線程而不是等待,這樣就大大提高了程序的效率。 缺點:線程也是程序,所以線程需要占用內(nèi)存,線程越多占用內(nèi)存也越多; 多線程需要協(xié)調(diào)和管理,所以需要CPU時間跟蹤線程; 線程之間對共享
5、資源的訪問會相互影響,必須解決競用共享資源的問題;線程太多會導(dǎo)致控制太復(fù)雜,最終可能造成很多Bug;(3)控制線程的類和方法 在.NET中,多線程的功能定義在System.Threading命名空間中。要使用多線程,必須先聲明引用此命名空間。具體使用的類是:System.Threading.Thread,Thread類的方法如下所列。Start() :啟動一個線程 Sleep(int):靜態(tài)方法,暫停當前線程指定的毫秒數(shù) Abort() :通常使用該方法來終止一個線程 Join():禁止調(diào)用線程,直到線程終止Interrupt():中止處于Sleep或者Join線程狀態(tài)的線程Suspend()
6、:該方法并不終止未完成的線程,它僅僅掛起線程,以后還可恢復(fù) Resume() :恢復(fù)被Suspend()方法掛起的線程的執(zhí)行 (4) Thread.ThreadState 屬性 使用線程的ThreadState屬性可以確定線程當前的狀態(tài),這個狀態(tài)將是ThreadState枚舉中指定的一個值,如下所列。Aborted:線程已停止AbortRequested:線程的Thread.Abort()方法已被調(diào)用,但是線程還未停止Background:線程在后臺執(zhí)行Running:線程正在正常運行Stopped:線程已經(jīng)被停止StopRequested:線程正在被要求停止Suspended:線程已經(jīng)被掛起
7、SuspendRequested:線程正在要求被掛起,但是未來得及響應(yīng)Unstarted:未調(diào)用Thread.Start()開始線程的運行WaitSleepJoin:線程因為調(diào)用了Wait(),Sleep()或Join()等方法處于封鎖狀態(tài) (5)線程的生命周期 與人有生老病死一樣,線程也同樣要經(jīng)歷開始(等待)、運行、掛起、封鎖和停止幾種不同的狀態(tài)。這幾種狀態(tài)都可以通過Thread類中的方法進行控制。下圖是幾種狀態(tài)之間的轉(zhuǎn)換和相關(guān)的方法。(6)線程的優(yōu)先級 在一個應(yīng)用程序中可能存在多個線程。如果創(chuàng)建了多個線程并要執(zhí)行這些線程,那操作系統(tǒng)如何知道先運行哪一個線程?解決辦法是可以對每個線程都指定優(yōu)
8、先級。 Thread類中有一個ThreadPriority屬性,它用來設(shè)置優(yōu)先級,但不能保證操作系統(tǒng)會接受該優(yōu)先級。線程的優(yōu)先級由高到低分別是Highest,AboveNormal,Normal,BelowNormal,Lowest。系統(tǒng)默認為ThreadPriority.Normal。 指定優(yōu)先級的代碼是:myThread.Priority=ThreadPriority.Lowest;(7) 線程實例演示線程實例。程序啟動后,開始運行主線程,接著啟動子線程,然后讓主線程休眠1ms后,終止子線程,主線程等待直到子線程結(jié)束。最后程序又重啟終止的子線程,則產(chǎn)生異常?!纠?1-1】主、子線程運行實例
9、。5 Control.Invoke 在多線程的WinForms程序中,通過非創(chuàng)建控件的線程調(diào)用控件的的屬性和方法是非法的,所有跨進程的調(diào)用必須被明確地排列至創(chuàng)建控件的線程中(通常為主線程)。因為從另外一個線程操作windows窗體上的控件(運行在主線程),就會和主線程產(chǎn)生競爭,造成不可預(yù)料的結(jié)果,甚至死鎖。所以 windows GUI編程有一個規(guī)則,就是只能通過創(chuàng)建控件的線程來操作控件的數(shù)據(jù)。 因此,.net為解決這個問題,由Control類提供了Invoke方法,實現(xiàn)了其它線程更新GUI界面控件的機制。這樣,如果從線程外操作windows窗體控件,就可使用Invoke方法,通過一個委托把調(diào)用
10、封送到控件所屬的線程上執(zhí)行。 Invoke方法需要一個委托對象作為參數(shù)(委托是一個可以對方法進行引用的類)。調(diào)用者通過Invoke方法中的委托參數(shù)就可以把需要調(diào)用的函數(shù)地址封送給界面線程。這些方法里面如果包含了更改控件狀態(tài)的代碼,那么由于最終執(zhí)行這個方法的是界面線程,從而避免了競爭條件,避免了不可預(yù)料的問題。 與其他的類不同,委托類具有一個簽名,并且它只能對與其簽名匹配的方法進行引用。Invoke方法中不帶參數(shù)和帶參數(shù)的委托簽名如下:Control.Invoke(Delegate Method) Control.Invoke(Delegate Method, params object arg
11、s)6 tcp/ip 協(xié)議和端口(1) TCP/IP 協(xié)議 TCP/IP協(xié)議是物理網(wǎng)上的一組完整的網(wǎng)絡(luò)協(xié)議。協(xié)議的基本傳輸單位是數(shù)據(jù)包,TCP協(xié)議負責把數(shù)據(jù)分成若干個數(shù)據(jù)包,并給每個數(shù)據(jù)包加上包頭(就像給一封信加上信封),包頭上有相應(yīng)的編號,以保證在數(shù)據(jù)接收端能將數(shù)據(jù)還原為原來的格式,IP協(xié)議在每個包頭上再加上接收端主機地址,這樣數(shù)據(jù)找到自己要去的地方(就像信封上要寫明地址一樣),如果傳輸過程中出現(xiàn)數(shù)據(jù)丟失、數(shù)據(jù)失真等情況,TCP協(xié)議會自動要求數(shù)據(jù)重新傳輸,并重新組包??傊琁P協(xié)議保證數(shù)據(jù)的傳輸,TCP協(xié)議保證數(shù)據(jù)傳輸?shù)馁|(zhì)量。 TCP/IP協(xié)議的核心部分是傳輸層協(xié)議(TCP、UDP),網(wǎng)絡(luò)層
12、協(xié)議(IP)和物理接口層,這三層通常是在操作系統(tǒng)內(nèi)核中實現(xiàn),用戶一般不涉及。編程時,編程界面有兩種形式:由內(nèi)核直接提供的系統(tǒng)調(diào)用和以庫函數(shù)方式提供的各種函數(shù)。前者為核內(nèi)實現(xiàn) ,后者為核外實現(xiàn)。用戶服務(wù)要通過核外的應(yīng)用程序才能實現(xiàn),這樣就需要使用套接字(socket)。 如圖11-3是TCP/IP協(xié)議核心與應(yīng)用程序關(guān)系圖。 (2)端口 一般來說我們的計算機上運行著非常多的應(yīng)用程序,它們可能都需要同遠程主機打交道,所以遠程主機就需要有一個ID來標識它想與本地機器上的哪個應(yīng)用程序打交道,這里的ID就是端口。將端口分配給一個應(yīng)用程序,那么來自這個端口的數(shù)據(jù)則總是針對這個應(yīng)用程序的。 在Internet
13、中,TCP/IP 使用一個網(wǎng)絡(luò)地址和一個服務(wù)端口號來唯一標識設(shè)備。網(wǎng)絡(luò)地址標識網(wǎng)絡(luò)上的特定設(shè)備,端口號標識要連接到的該設(shè)備上的特定服務(wù)。11.2 .Net 框架中的Internet訪問1 Net類的網(wǎng)絡(luò)服務(wù)層次 Microsoft.Net 框架為應(yīng)用程序訪問Internet提供了分層的、可擴展的以及受管轄的網(wǎng)絡(luò)服務(wù),其名字空間System.Net和System.Net.Sockets包含豐富的類可以開發(fā)多種網(wǎng)絡(luò)應(yīng)用程序。.Net類采用的分層結(jié)構(gòu)允許應(yīng)用程序在不同的控制級別上訪問網(wǎng)絡(luò),開發(fā)人員可以根據(jù)需要選擇針對不同的級別編制程序,這些級別幾乎囊括了Internet的所有需要-從socket套接
14、字到普通的請求/響應(yīng),更重要的是,這種分層是可以擴展的,能夠適應(yīng)Internet不斷擴展的需要。 拋開ISO/OSI模型的7層構(gòu)架,單從TCP/IP模型上的邏輯層面上看,.Net類可以視為包含3個層次:請求/響應(yīng)層、應(yīng)用協(xié)議層、傳輸層。WebReqeust和WebResponse 代表了請求/響應(yīng)層,支持Http、Tcp和Udp的類組成了應(yīng)用協(xié)議層,而Socket類處于傳輸層。如下圖示。 可見,傳輸層位于這個結(jié)構(gòu)的最底層,當其上面的應(yīng)用協(xié)議層和請求/響應(yīng)層不能滿足應(yīng)用程序的特殊需要時,就需要使用這一層進行Socket套接字編程。2 .NET 框架中的請求和響應(yīng) 在.NET 框架中,可使用特定類
15、來訪問Internet,如WebRequest-WebResponse、HttpWebRequest-HttpWebResponse、WebClient、TcpClient及Socket,其中前三者比較簡單,后兩者比較底層。 對于簡單的Internet訪問,WebClient 類可提供從Internet服務(wù)器上載、下載數(shù)據(jù)最簡便的方法:可用來上傳和下載文件、發(fā)送和接收流以及將數(shù)據(jù)緩沖區(qū)發(fā)送到服務(wù)器并接收響應(yīng)。WebClient 使用 WebRequest和 WebResponse 類來建立與Internet 資源的實際連接。 對于復(fù)雜的Internet訪問,客戶端應(yīng)用程序可使用 WebRequ
16、est及其子類來請求服務(wù)器中的數(shù)據(jù)。WebRequest 封裝了連接到服務(wù)器、發(fā)送請求并接收響應(yīng)的詳細信息。由于WebRequest和WebResponse都是抽象基類,所以由其子類(例如 HttpWebRequestHttpWebResponse)實現(xiàn)其定義的屬性和方法。對于不能使用請求/響應(yīng)模型的應(yīng)用程序而言,或者對于需要偵聽網(wǎng)絡(luò)并發(fā)送請求的應(yīng)用程序而言,System.Net.Sockets 命名空間提供 TCPClient 類、TCPListener 類和 UDPClient 類。這些類處理使用不同的傳輸協(xié)議建立連接的詳細信息,并且作為流向應(yīng)用程序公開網(wǎng)絡(luò)連接。3.NET網(wǎng)絡(luò)訪問命名空間
17、WinForms網(wǎng)絡(luò)編程中用到 System.Net 和 System.Net.Sockets 命名空間。System.Net 命名空間主要處理高層的操作,例如下載和上載文件;System.Net.Sockets 包含執(zhí)行低層操作的類,處理用于讓計算機之間高效通信的代碼 (1) System.Net命名空間System.Net命名空間對System.Net.Sockets中的基礎(chǔ)網(wǎng)絡(luò)通信類庫作了一些封裝,使得對一些高端應(yīng)用的編程更為簡單、方便。 System.Net命名空間中最為核心的類是WebRequest和WebResponse,這兩個抽象類是協(xié)議實現(xiàn)的基礎(chǔ)。Net命名空間核心類如下所列:
18、IPAddress:描繪一個IP地址WebClient:發(fā)送或接收來自url的數(shù)據(jù)WebRequest:抽象類,封裝與服務(wù)器連接、發(fā)送請求和接收響應(yīng)的詳細信息WebResponse:抽象類,通過WebRequest實例調(diào)用GetResponse()方法來創(chuàng)建該對象2 System.Net.Sockets命名空間 System.Net.Sockets封裝了網(wǎng)絡(luò)通信的基礎(chǔ)類庫,核心的類是Socket,它是最基礎(chǔ)的網(wǎng)絡(luò)編程接口。下面列出了本書涉及到的類。Socket:實現(xiàn)了Sockets編程接口,有大量屬性和方法用于網(wǎng)絡(luò)連接NetworkStream:由Stream派生,表示來自網(wǎng)絡(luò)的數(shù)據(jù)流TcpC
19、lient:可以連接到服務(wù)器的TCP客戶端封裝類TcpListener:用于從TCP網(wǎng)絡(luò)客戶偵聽TCP連接請求的服務(wù)器端封裝類UdpClient:用于為UDP客戶端創(chuàng)建連接的通信封裝類,主要用于本地網(wǎng)絡(luò)11.3 .Net 框架中的Internet訪問 萬維網(wǎng)是一個客戶端/服務(wù)器應(yīng)用程序,借助瀏覽器對世界各地的Web服務(wù)器上存儲的數(shù)據(jù)進行訪問。通過System.Web命名空間下的WebClient類,可以實現(xiàn)向Internet資源發(fā)送和接收數(shù)據(jù)。該類不能繼承,可用來從URI標識的任何Internet資源請求并接收文件。11.4 使用webRequestwebResponse訪問Internet
20、WebClient是通用類,使用起來比較簡單,主要用于處理發(fā)送請求和接收響應(yīng)的協(xié)議。它不能處理任一協(xié)議的任何附加特性,如果想利用這些特性,就需要使用以WebRequest類和WebResponse類為基類的一系列類。 WebRequest 和WebResponse類都是抽象基類。在實際工作中,WebRequest和WebResponse更適合用來處理相對較為簡單的帶認證信息的HTTP請求。如果認證信息不是必需的,那么使用WebClient類要更好一些。如果需要發(fā)送一個HTTP POS請求,那么HttpWebRequest和HttpWebResponse類通常是更好的選擇。 WebRequest
21、 類通過使用傳遞到其Create方法的URI值來確定要創(chuàng)建的特定派生類實例。通過調(diào)用 WebRequest 實例上的 GetResponse 方法來建立對 Internet 資源的請求。對于將數(shù)據(jù)發(fā)送到服務(wù)器的請求,WebRequest.GetRequestStream 方法提供要將數(shù)據(jù)發(fā)送到其中的網(wǎng)絡(luò)流。GetResponse 方法返回與 WebRequest 匹配的特定協(xié)議的WebResponse,如以下語句所示。 WebRequest req = WebRequest.Create(); WebResponse resp = req.GetResponse(); 如果應(yīng)用程序只需要 We
22、bResponse 中返回的標頭信息并忽略任何返回的數(shù)據(jù),則不必獲取響應(yīng)流。下面的代碼示例顯示如何從 Internet 主機返回服務(wù)器標頭信息。 WebRequest wReq = WebRequest.Create();WebResponse wResp = wReq.GetResponse();string server = wResp.HeadersServer;wResp.Close();11. 5 使用HttpWebRequest - HttpWebResponse訪問Internet .NET 框架使用 HttpWebRequest 和 HttpWebResponse 類來提供對
23、HTTP 協(xié)議的全面支持。每當靜態(tài)方法 WebRequest.Create 遇到以“http”或“https”開頭的URI時,在默認情況下將返回從 WebRequest 和 WebResponse 派生的類。多數(shù)情況下,WebRequest 和 WebResponse 類提供生成請求所需的一切,但如果需要訪問作為屬性公開的 HTTP 特定功能,則可以將這些類的類型轉(zhuǎn)換為 HttpWebRequest 或 HttpWebResponse。 以下代碼顯示如何訪問 HTTP 特定的屬性,在這里是從 Web 服務(wù)器獲取協(xié)議版本號。 HttpWebRequest HttpWReq = (HttpWebR
24、equest)WebRequest.Create();HttpWebResponse HttpWResp = (HttpWebResponse)HttpWReq.GetResponse();/ 從Web服務(wù)器獲取http協(xié)議版本號String ver = HttpWResp.ProtocolVersion.ToString(); Console.Write(http協(xié)議的版本號是:+ver);HttpWResp.Close();11.6 SOCKET編程1 套接字定義套接字(SOCKET)是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元??梢詫⑻捉幼挚醋鞑煌鳈C間的進程進行雙向通信
25、的端點,它構(gòu)成了在單個主機內(nèi)及整個網(wǎng)絡(luò)間的編程界面,是 Windows Sockets應(yīng)用程序用來在網(wǎng)絡(luò)上發(fā)送或接收數(shù)據(jù)包的對象。 Socket作為tcpip網(wǎng)絡(luò)協(xié)議接口,內(nèi)部定義了許多的函數(shù)和例程。在網(wǎng)絡(luò)通信中,兩個主機或兩個進程通過網(wǎng)絡(luò)來傳遞數(shù)據(jù),程序在網(wǎng)絡(luò)對話的每一端都需要一個socket。 根據(jù)通信性質(zhì)分類,套接字有兩種不同的類型:流套接字和數(shù)據(jù)報套接字。 (1)流套接字 流套接字提供雙向的、有序的、無重復(fù)并且無記錄邊界的數(shù)據(jù)流,即字節(jié)流。字節(jié)流能確保以正確的順序無重復(fù)地被送達,它適用于處理大量數(shù)據(jù)。 流套接字是面向連接的,通信雙方進行數(shù)據(jù)交換之前,必須建立一條路徑,這樣既確定了它們之
26、間存在的路由,又保證了雙方都是活動的、可彼此響應(yīng)的。 (2)數(shù)據(jù)報套接字 數(shù)據(jù)報套接字支持雙向的數(shù)據(jù)流,但并不保證數(shù)據(jù)傳輸?shù)目煽啃浴⒂行蛐院蜔o重復(fù)性。也就是說,一個從數(shù)據(jù)報套接字接收信息的進程有可能發(fā)現(xiàn)信息重復(fù),或者和發(fā)出時的順序不同的情況。所以,數(shù)據(jù)報并不十分可靠,需有程序員負責管理數(shù)據(jù)報的排序和可靠性。2 套接字編程概述 談起socket編程,大家也許會想起QQ和IE。還有許多網(wǎng)絡(luò)工具如P2P、NetMeeting等在應(yīng)用層實現(xiàn)的應(yīng)用程序,也是用socket來實現(xiàn)的。 在.Net中,System.Net.Sockets 命名空間為需要嚴密控制網(wǎng)絡(luò)訪問的開發(fā)人員提供了 Windows Soc
27、kets接口的托管實現(xiàn)。System.Net 命名空間中的所有其他網(wǎng)絡(luò)訪問類都建立在該套接字Socket實現(xiàn)之上,如TCPClient、TCPListener 和 UDPClient 類封裝有關(guān)創(chuàng)建到 Internet 的 TCP 和 UDP 連接的詳細信息;NetworkStream類則提供用于網(wǎng)絡(luò)訪問的基礎(chǔ)數(shù)據(jù)流等,常見的許多Internet服務(wù)都可以見到Socket的蹤影,如Telnet、Http、Email、Echo等,這些服務(wù)盡管通訊協(xié)議Protocol的定義不同,但是其基礎(chǔ)的傳輸都是采用的Socket。 所以,Socket象流Stream一樣被視為一個數(shù)據(jù)通道,這個通道架設(shè)在客戶端
28、和遠程服務(wù)器端之間,數(shù)據(jù)的讀取和寫入均針對這個通道來進行。 使用socket開發(fā)程序時,通常使用或ukp兩種協(xié)議。Tcp是面向連接的協(xié)議,提供了可靠的數(shù)據(jù)傳輸,使用tcp套接字進行通信首先讓客戶端連接到服務(wù)器,然后才可以進行通信;udp是面向無連接的協(xié)議。當數(shù)據(jù)被發(fā)送以后,不管數(shù)據(jù)是否到達,程序都不會重新發(fā)送。3 基于TCP協(xié)議的socket編程 (1)TCP編程類 .Net FrameWork為Socket通訊提供了System.Net.Sockets命名空間,在這個命名空間里包含了允許直接發(fā)送TCP網(wǎng)絡(luò)請求或偵聽特定端口上的TCP網(wǎng)絡(luò)請求的相關(guān)類:TCPClient和TCPListener
29、,應(yīng)用程序可以通過這兩個類使用TCP服務(wù)。TcpClient和TcpListener與套接字socket的關(guān)系如圖所示 從圖中可以看出TcpClient和TcpListener對套接字進行了封裝。TcpListener用于接受連接請求,而TcpClient則用于接收和發(fā)送流數(shù)據(jù)。TcpListener持續(xù)地保持對端口的偵聽,一旦收到一個連接請求后,就可以獲得一個TcpClient對象,而對于數(shù)據(jù)的發(fā)送和接收都由TcpClient去完成。此時,TcpListener并沒有停止工作,它始終持續(xù)地保持對端口的偵聽狀態(tài)。 現(xiàn)在分別對 TCPClient 和 TCPListener 進行介紹 1) Tc
30、pClient類:為TCP網(wǎng)絡(luò)服務(wù)提供客戶端連接。該類提供了一些簡單的方法,通過網(wǎng)絡(luò)來連接、發(fā)送和接收流數(shù)據(jù)。 TcpClient類常用的方法及功能描述如下所示Close:關(guān)閉所有 TCP 連接并釋放與 TcpClient 關(guān)聯(lián)的資源Connect :將使用主機名和端口號將客戶端連接至遠程TCP 主機GetStream:返回用于發(fā)送和接收數(shù)據(jù)的NetworkStream 2) TCPListener類: 具有偵聽進入的TCP連接的方法,其中Start()方法用于開始偵聽進入的連接請求,并且將把進入的連接放置在隊列中,直到調(diào)用Stop()為止。AcceptSocket()或AcceptTcpCl
31、ient()方法可用于從進入的連接請求隊列中提取連接,如下所列。AcceptSocket:返回與遠程客戶端通信的套接字AcceptTcpClient :接受暫掛的連接請求 Start :開始偵聽傳入的連接請求 Stop:關(guān)閉偵聽器 (2) 實現(xiàn)過程及步驟 服務(wù)端實現(xiàn)監(jiān)聽連接,客戶端實現(xiàn)發(fā)送連接請求,建立連接后進行發(fā)送和接收數(shù)據(jù)的功能。 在服務(wù)器端,首先建立服務(wù)器端socket,然后,用Listening方法偵聽應(yīng)用程序等待用戶端的連接,當接收到來自用戶端的連接請求時,以 Accept 方法建立與用戶端的連接。接下來傳送數(shù)據(jù),用 Receive 及Send方法接收及傳送數(shù)據(jù),最后以 Close 方法關(guān)閉服務(wù)器端的Socket。 在客戶端,創(chuàng)建的Socket以 Connect方法建立與服務(wù)器的連接,當服務(wù)器端收到連接請求時,由服務(wù)器端的 Accept方法建立此連接, 接著用Receive及Send方法接收及傳送數(shù)據(jù),最后以Close關(guān)閉Socket連接 服務(wù)器端與客戶端的通信過程如下圖所示演示【例11-7】設(shè)計一個客戶端/服務(wù)器程序,客戶端將信息發(fā)往服務(wù)器,服務(wù)器將信息倒序后,再返回到客戶端。下面分兩部分來做,先完成服務(wù)器端程序,以下是完成步驟。 一、服務(wù)器程序 二、客戶端程序2 基于udp協(xié)議的socket編程 在應(yīng)用程序中,當速度和性能的需求比可靠性更重要時
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 劇組合作合同范例
- 1956-13-15-會議會展服務(wù)合同協(xié)議書
- 體育服裝采購合同范例
- 企業(yè)定向采購合同范本
- 中介買房押金合同范例
- 別墅樓道電梯銷售合同范例
- 個人荒山轉(zhuǎn)讓合同范本
- 人教版初中歷史與社會七年級上冊 3.5.1 石油寶庫 教學(xué)設(shè)計
- 農(nóng)場廠長合同范例
- 加盟合同范本里
- 體育測量與評價-第一章緒論課件
- 航空機載設(shè)備履歷本
- 企業(yè)風(fēng)險管理-戰(zhàn)略與績效整合(中文版)
- 高效能人士的七個習(xí)慣The7HabitsofHighlyEffectivePeople課件
- 小學(xué)體育與健康教育科學(xué)二年級下冊第一章體育基本活動能力立定跳遠教案 省一等獎
- 工程分包管理計劃
- 民事訴訟法學(xué)整套ppt課件完整版教學(xué)教程最全電子講義(最新)
- 河北省自然科學(xué)基金資助項目申請書模板
- 四年級奧數(shù)-容斥問題
- 常用標準波導(dǎo)和法蘭尺寸
- 損益平衡點的計算方法
評論
0/150
提交評論