




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第8章
網絡通信程序設計
教學導航教學目標了解網絡通信的基本概念和Java網絡通信的支持機制了解基于TCP的通信、基于UDP的通信和基于URL的通信的實現方法掌握服務器端與客戶端套接字的創建與連接方法學會設計基于TCP單向通信的網絡應用程序學會設計基于TCP雙向通信的網絡應用程序學會設計基于TCP多客戶端與服務器通信的網絡應用程序教學重點服務器端與客戶端套接字的創建及連接方法基于TCP雙向通信的網絡應用程序設計基于TCP多客戶端與服務器通信的網絡應用程序設計
身臨其境
在線客服與客戶互動交流的界面如圖8-1所示,客服可以通過該界面與客戶進行實時互動交流。石頭剪子布小游戲的操作界面如圖8-2所示,單擊【重新開始】按鈕,可以重新開始玩石頭剪子布小游戲。
圖8-1
在線客服與客戶互動交流的界面
圖8-2
石頭剪子布小游戲的操作界面
前導知識【知識8-1】認知網絡通信的基本概念在進行網絡編程之前,有必要了解網絡通信的基本概念,主要包括IP地址、端口、協議(其中TCP/IP和UDP為兩項重要協議,單獨介紹)等。為了實現兩臺計算機通信,必須有一條網絡線路連接兩臺計算機,如圖8-3所示。服務器是指提供信息的計算機或者程序,客戶端是指請求信息的計算機或程序,網絡用于連接服務器與客戶端,實現相互通信。圖8-3
客戶端、服務器和網絡
前導知識【知識8-1】認知網絡通信的基本概念(1)IP地址互聯網中連接了無數的服務器和客戶端,但它們并不是處于無序狀態,而是每一臺主機都有唯一的地址,作為該主機在互聯網中的唯一標志,這個地址稱為網際協議(InternetProtocol,IP)地址。IP地址是一種在Internet上給主機編址的方式。IP地址由4個十進制數組成,每個數的取值范圍是0~255,各數之間用一個點號“.”分隔,如。(2)端口端口(Port)是計算機數據I/O的接口。例如,個人計算機上都有的串行口,它是I/O設備上的一個物理接口。計算機接入通信網絡或Internet時也需要一個端口,但這個端口不是物理端口,而是一個由16位數標識的邏輯端口,即一個假想的連接裝置,且這個端口是TCP/IP的一部分,通過這個端口可以進行數據I/O。端口號是一個16位的二進制數,其范圍是0~65535。在實際應用中,計算機中的1~1024端口被保留為系統使用,在Java程序中不應使用這些保留端口,而應該使用1025~65535端口中的一個來進行通信,以免發生端口沖突。如圖8-4所示,HTTP服務器一般使用80端口,FTP服務器一般使用21端口,客戶端1通過80端口才可以連接到服務器系統的HTTP服務器,而客戶端2通過21端口才可以連接到服務器系統的FTP服務器。圖8-4
端口示意
前導知識【知識8-1】認知網絡通信的基本概念(3)協議為了保證兩臺以上的計算機之間能正確通信,必須有某種計算機都遵守的規則和約定,將這種規則和約定稱為協議(Protocol)。協議是描述數據交換時必須遵循的規則和數據格式。網絡協議規定了在網絡上傳輸的數據類型,并規定了怎樣解釋這些數據類型和怎樣請求傳輸這些數據。在Internet中控制復雜服務的協議有很多,其中較為常用的協議有FTP(文件傳送協議,端口號為21)、HTTP(超文本傳送協議,端口號為80)、SMTP(簡單郵件傳送協議,端口號為25)、POPv3(郵局協議第3版,端口號為110)。(4)TCP/IP傳輸控制協議(TransmissionControlProtocol,TCP)是一種基于連接的傳輸層協議,它為兩臺計算機提供了點對點的可靠數據流,保證從連接的一個端點發送的數據能夠以正確的順序到達連接的另一個端點。TCP與IP一起使用時,將兩者合稱為TCP/IP。TCP負責數據或文件的分組與重組,IP負責發送與接收數據或文件。數據或文件在網絡中傳輸時會被分成許多塊,將這些塊稱為包(Packet)。TCP是可靠的、面向連接的協議,非常適用于可靠性要求比較高的場合。(5)UDP用戶數據報協議(UserDatagramProtocol,UDP)是應用層提供的一種簡單、高效的用戶數據傳輸服務,但是它并不對連接狀態與數據損失做檢查。UDP從一個應用程序向另一個應用程序發送獨立的數據報(對應TCP中的包),但并不保證這些數據報一定能到達另一個應用程序,并且這些數據報的傳輸順序不可靠,即后發送的數據報可能先到達目的地。因此,使用UDP時,任何必需的可靠性都必須由應用層自身提供。UDP適用于對通信可靠性要求較低且對通信性能要求較高的應用,如域名服務(DomainNameService,DNS)、路由信息協議(RoutingInformationProtocol,RIP)、普通文件傳送協議(TrivialFileTransferProtocol,TFTP)等應用層協議都建立在UDP的基礎上。
前導知識【知識8-2】認知Java網絡通信的支持機制Java提供了強大的網絡支持功能,Java程序網絡通信功能的實現位于應用層,Java的網絡編程API隱藏了網絡通信編程的一些煩瑣細節,為用戶提供了與平臺無關的使用接口,使程序員不需要關心傳輸層中TCP/UDP的實現細節就能夠實現網絡編程。Java支持網絡通信的類位于包中,其中URL類、URLConnection類、Socket類和ServerSocket類使用TCP實現網絡通信,DatagramPacket類、DatagramSocket類、MulticastSocket類使用UDP實現網絡通信。生活中,我們通常將可以用來插插頭的裝置稱為插座,其一般用于連接電器與電源,與此類似,網絡程序中的套接字(Socket)用于將應用程序與端口連接起來。套接字是一個軟件實現,是一個假想的連接裝置,如圖8-5所示。
圖8-5
套接字
前導知識【知識8-2】認知Java網絡通信的支持機制Java主要提供了兩種網絡支持機制。(1)基于URL的通信編程Java支持使用統一資源定位符(UniformResourceLocator,URL)訪問網絡資源,這種方法適用于訪問Internet,尤其是WWW上的資源。Java提供了使用URL訪問網絡資源的類,使用戶不需要考慮URL中各種協議的處理過程,就可以獲得URL資源。(2)基于套接字的通信編程套接字表示應用程序與網絡之間的接口,套接字通信過程是基于TCP/IP中的傳輸層接口套接字實現的。Java提供了對應套接字機制的一組類,并支持流和數據報兩種通信過程,程序設計者只需創建Socket類對象,即可使用套接字。在使用基于TCP的雙向通信時,網絡中的兩個應用程序之間必須先建立一個連接,這個連接的兩個端點稱為套接字。從應用編程的角度來看,應用程序可以將一個輸入流或輸出流綁定到某一個套接字上,讀寫這些I/O流即可實現基于TCP的通信。如圖8-6所示,如果要向套接字的輸出流寫數據,則只需另一方從套接字的輸入流中讀取數據。圖8-6
套接字流
前導知識【知識8-2】認知Java網絡通信的支持機制套接字通信機制有兩種:基于TCP的通信機制和基于UDP的通信機制。在基于TCP的通信機制中,通信雙方在開始時必須進行一次連接過程,通過建立一條通信鏈路提供可靠的字節流服務。在基于UDP的通信機制中,通信雙方不存在連接過程,一次網絡I/O以一個數據報形式進行,且每次網絡I/O可以和不同主機的不同進程同時進行。基于UDP的通信機制的開銷較小,但提供的數據傳輸服務不可靠,不能保證數據報一定能到達目的地。Java同時支持基于TCP和基于UDP的這兩種通信機制,并且在這兩種機制中都采用了套接字表示通信過程中的端點。在基于TCP的通信機制中,包中的Socket類和ServerSocket類分別表示連接的客戶端和服務器端;在基于UDP的通信機制中,DatagramSocket類表示發送和接收數據包的端點。當不同計算機中的兩個程序要進行網絡通信時,無論是哪一種機制都需要知道遠程主機的地址或主機名,以及端口號,且網絡通信中的服務器端必須運行程序等待連接或等待接收數據報。
前導知識【知識8-3】認知基于TCP的通信(1)客戶端編程模式Socket類提供了以下重載的構造方法在客戶端程序中創建Socket類的實例對象。①Socket(Stringhost,intport)。②Socket(InetAddressaddress,intport)。③Socket(Stringhost,intport,InetAddresslocalAddress,intlocalPort)。④Socket(InetAddressaddress,intport,InetAddresslocalAddress,intlocalPort)。上述Socket類的構造方法中各個參數的含義如下:host表示服務器主機名;port表示服務器的端口號;address表示服務器的IP地址;localAddress表示本地主機的IP地址;localPort表示本地主機的端口號。基于TCP通信的客戶端編程模式的基本流程如下。①
客戶端程序通過指定的主機名(或者InetAddress的實例對象)和端口號構造一個套接字。②
調用Socket類的getInputStream()方法和getOutputStream()方法分別打開與該套接字關聯的輸入流和輸出流,依照服務程序約定的協議讀取輸入流中的數據或將數據寫入輸出流。③
依次關閉I/O流和套接字。
前導知識【知識8-3】認知基于TCP的通信(2)服務器端編程模式ServerSocket類也提供了多種重載的構造方法以在程序中創建ServerSocket類的實例對象。①ServerSocket(intport):創建一個服務器套接字,并將其綁定到指定端口上。②ServerSocket(intport,intbacklog):首先創建一個服務器套接字,然后將其綁定到指定的端口上,并指出連接請求隊列的最大長度。在ServerSocket類中最重要的方法是accept(),該方法可以建立并返回一個已與客戶端程序連接的套接字。基于TCP通信的服務器端編程模式的基本流程如下。①
服務器端程序通過指定的監聽端口創建一個ServerSocket類的實例對象,然后調用該對象的accept()方法。②
調用accept()方法程序會發生阻塞,直至有一個客戶端程序發送連接請求到服務器端程序監聽的端口。服務器端程序接收到連接請求后,將分配一個新端口號建立與客戶端程序的連接并返回該連接的一個套接字。③
服務器端程序可以調用該套接字的getInputStream()方法和getOutputStream()方法獲取與客戶端程序的連接關聯的輸入流和輸出流,并依照預先約定的協議讀取輸入流中的數據或將數據寫入輸出流。④
完成所有的通信后,服務器端程序依次關閉所有的輸入流、輸出流、已建立連接的套接字以及用于監聽的套接字。
前導知識【知識8-4】認知基于UDP的通信UDP是傳輸層的無連接通信協議,數據報是一種在網絡中獨立傳播的包含地址信息的消息。UDP采用數據報進行通信。數據報是否可以到達目的地,以什么順序到達目的地,到達目的地時內容是否依然正確等是未經校驗的。因而UDP是一種不可靠的點對點通信,適用于對通信性能要求較高但對通信可靠性要求較低的應用。包為實現UDP通信提供了兩個類:DatagramSocket類和DatagramPacket類。其中,DatagramSocket類對象代表一個被傳送的UDP數據報,DatagramSocket類封裝了被傳送數據報的內容、源主機和端口號、目的主機和端口號等信息,且支持該UDP套接字發送和接收UDP數據報;DatagramPacket類對象代表一個用于傳送UDP數據報的UDP套接字。基于UDP的通信是將數據報從一個發送方傳輸給單個接收方。在基于UDP實現客戶端/服務器通信時,無論是在客戶端還是服務器端,首先都要創建一個DatagramSocket對象,用來表示數據報通信的端點,然后使用DatagramPacket對象封裝數據報。UDP套接字面向一個個獨立的數據報,既可用于發送UDP數據報,又可用于接收UDP數據報。在創建DatagramSocket類的實例對象時,可以通過不同形式的構造方法指定UDP套接字綁定的主機地址和端口號。
前導知識【知識8-4】認知基于UDP的通信DatagramSocket類常用的構造方法如下。①DatagramSocket():與本機任何可用的端口綁定。②DatagramSocket(intport):與指定的端口綁定。③DatagramSocket(intport,InetAddressaddress):與指定本機地址的端口綁定。DatagramPacket類既可以描述客戶端程序發送的UDP數據報,又可以描述服務器端程序接收的UDP數據報。DatagramPacket類常用的構造方法如下。①DatagramPacket(byte[]buf,intlength)。②DatagramPacket(byte[]buf,intoffset,intlength)。③DatagramPacket(byte[]buf,intlength,InetAddressaddress,intport)。④DatagramPacket(byte[]buf,intoffset,intlength,InetAddressaddress,intport)。
前導知識【知識8-5】認知基于URL的通信URL表示Internet上一個資源的引用或地址,Java網絡應用程序也是使用URL來定位要訪問的Internet上的資源的。(1)熟悉URL地址URL地址使Java網絡應用程序能夠在通信雙方之間以某種方式建立連接,從而完成相應的操作。一個完整的URL的語法格式如下。<通信協議>://<主機名>:<端口號>/<文件名>①
通信協議:數據交換使用的協議,常用的有HTTP、FTP等。②
主機名:資源所在的計算機,它有兩種表示方法,即IP地址和域名。③
端口號:該計算機上的某個特定服務,其有效范圍是0~65535。④
文件名:該資源在目的計算機上的位置,即路徑。(2)創建URL對象在包中定義的URL類提供了最簡單的網絡編程接口,只需使用一次方法調用即可下載URL對象指定的網絡資源的內容。使用URL對象下載網絡資源內容之前必須創建一個URL類的實例對象,URL類提供的重載形式的構造方法如下。①publicURL(Stringprotocol,Stringhost,intport,Stringfile)。②publicURL(Stringprotocol,Stringhost,Stringfile)。③publicURL(Stringspec)。④publicURL(URLcontext,Stringspec)。
前導知識【知識8-5】認知基于URL的通信(3)獲取URL對象的狀態URL類提供的獲取URL對象狀態的方法如表8-1所示,可以從一個字符串描述的URL地址中提取協議名、主機名、端口號和文件名等信息。(4)使用URL類的openStream()方法讀取URL地址標識的資源內容創建一個URL對象以后,可以通過URL類的openStream()方法獲取一個綁定到該URL地址資源的輸入流(java.io.InputStream)對象,并通過讀取該輸入流訪問整個資源的內容。(5)使用URLConnection類的openConnection()方法實現對URL資源的讀/寫操作訪問一個指定的URL數據,除了使用URL類的openStream()方法實現讀操作之外,還可以通過URLConnection類提供的openConnection()方法在應用程序與URL之間創建一個連接,從而實現對URL所表示資源的讀/寫操作。URLConnection類提供多個進行連接設置和操作的方法,其中獲取連接上I/O流的方法如下,通過返回的I/O流可以實現對URL數據的讀/寫。①InputStreamgetInputStream()。②OutputStreamgetOutputStream()。方法名稱功能說明getProtocol()獲取該URL中的協議名getHost()獲取該URL中的主機名getPort()獲取該URL中的端口號,如果沒有設置端口,則返回-1getFile()獲取該URL中的文件名getRef()獲取該URL中文件的相對位置表8-1
URL類提供的獲取URL對象狀態的方法8.1服務器端與客戶端套接字的創建及連接8.2基于TCP單向通信的網絡應用程序設計8.4基于TCP雙向通信的網絡應用程序設計學習要點8.3基于TCP多客戶端與服務器通信的網絡應用程序設計8.5基于UDP客戶端相互通信的網絡應用程序設計任務8-1-1
創建并連接套接字【任務描述】編寫程序并完成以下任務。按事先指定的端口號創建服務器套接字。按待連接服務器的IP地址和端口號創建客戶端套接字,與服務器套接字連接,若與服務器套接字連接成功,則輸出提示信息。首先啟動服務器端的程序,然后啟動客戶端的程序。服務器端程序啟動成功后,監聽客戶端的連接請求,若檢測到客戶端的連接請求,則創建新的套接字,并使其與客戶端套接字連接,而服務器繼續等待其他客戶端的連接請求。客戶端創建套接字后,將馬上向指定的IP地址及端口進行連接嘗試。服務器套接字與客戶端套接字連接成功后,就可以獲取套接字的輸入輸出流,進行數據交換。但本任務暫不要求進行數據交換。InetAddress類是與IP地址相關的類,利用此類可以獲取并輸出主機名、主機IP地址和本機的IP地址。任務8-1-1
創建并連接套接字【知識8-6】認知創建并連接套接字的方法1.InetAddress類在基于TCP的網絡通信中,Java應用程序需要直接使用IP地址或域名指定運行在Internet上的某一臺主機。包中定義的InetAddress類是一個IP地址或域名的抽象類。在創建InetAddress類的一個實例對象時,可以使用字符串表示的域名,也可以使用字節數組表示的IP地址。InetAddress類沒有提供普通的構造方法,而是提供了用于獲取InetAddress實例對象的靜態方法。InetAddress類的常用方法如下。①publicsynchronizedstaticInetAddressgetLocalHost():返回本地主機的IntetAddress對象。②publicstaticInetAddressgetByName(Stringhost):獲取與參數host對應的IntetAddress對象。③publicStringgetHostAddress():返回表示主機IP地址的字符串。④publicStringgetHostName():返回表示主機名的字符串。以上方法都會拋出UnknownHostException異常,這個異常會在主機不存在或網絡連接錯誤時發生,必須進行相應的異常處理。任務8-1-1
創建并連接套接字【知識8-6】認知創建并連接套接字的方法2.ServerSocket類ServerSocket類用于表示服務器套接字,通過指定的端口來等待套接字的連接。服務器套接字一次只與一個套接字進行連接,如果有多臺客戶端同時提出連接請求,則服務器套接字會將請求連接的客戶端套接字存入隊列中,并從隊列中取出一個套接字,使其與服務器套接字連接。所以隊列的大小即服務器可同時接收的連接請求數。如圖8-7所示,先按事先指定的端口號創建服務器套接字。服務器套接字等待客戶端的連接請求,并創建新的套接字使其與客戶端套接字連接,而本身繼續等待其他客戶端的連接請求。圖8-7
服務器套接字任務8-1-1
創建并連接套接字【知識8-6】認知創建并連接套接字的方法(1)ServerSocket類的常用構造方法如下。①publicServerSocket(intport)throwsIOException:使用指定的端口號創建服務器套接字。②publicServerSocket(intport,intbacklog)throwsIOException:使用指定的端口號和隊列大小創建服務器套接字。③publicServerSocket(intport,intbacklog,InetAddressbindAddr)throwsIOException:使用指定的端口號、隊列大小和IP地址創建服務器套接字。(2)ServerSocket類的常用方法如下。①publicSocketaccept()throwsIOException:等待客戶端的連接請求,若連接,則創建一個套接字,并將其返回。②publicvoidclose()throwsIOException:關閉服務器套接字。③publicbooleanisClosed():若服務器套接字成功關閉,則返回true,否則返回false。④publicInetAddressgetInetAddress():獲取服務器的IP地址和域名。⑤publicintgetLocalPort():獲取服務器套接字等待的端口號。⑥publicbooleanisBound():若服務器套接字已經與某個套接字地址綁定,則返回true,否則返回false。任務8-1-1
創建并連接套接字【知識8-6】認知創建并連接套接字的方法3.Socket類Socket類用于表示套接字,使用Socket類時,需要指定待連接服務器的IP地址及端口號。客戶端創建套接字以后,將馬上與指定的IP地址及端口號進行連接嘗試。服務器套接字會創建新的套接字,使其與客戶端套接字連接。服務器套接字與客戶端套接字成功連接后,就可以獲取套接字的輸入輸出流,進行數據交換了。(1)Socket類的常用構造方法如下。①publicSocket(Stringhost,intport)throwsUnknownHostException,IOException:創建連接指定主機與端口號的服務器套接字。②publicSocket(InetAddressaddress,intport)throwsIOException:創建連接指定IP地址和端口號的服務器套接字。(2)Socket類的常用方法如下。①publicInetAddressgetInetAddress():獲取被連接的服務器地址。②publicintgetPort():獲取端口號。③publicInetAddressgetLocalAddress():獲取本地地址。④publicintgetLocalPort():獲取本地端口號。⑤publicInputStreamgetInputStream()throwsIOException:獲取套接字的輸入流。⑥publicOutputStreamgetOutputStream()throwsIOException:獲取套接字的輸出流。⑦publicsynchronizedvoidclose()throwsIOException:關閉套接字。⑧publicbooleanisClosed():判斷套接字是否關閉。⑨publicbooleanisConnected():若套接字被連接,則返回true,否則返回false。8.1服務器端與客戶端套接字的創建及連接8.2基于TCP單向通信的網絡應用程序設計8.4基于TCP雙向通信的網絡應用程序設計學習要點8.3基于TCP多客戶端與服務器通信的網絡應用程序設計8.5基于UDP客戶端相互通信的網絡應用程序設計任務8-1-2
實現單客戶端向服務器發送字符串【任務描述】編寫一個單向通信的Java程序,實現客戶端向服務器發送字符串的功能,即實現單向通信功能。只要求客戶端向服務器發送字符串,不要求服務器向客戶端發送任何信息。客戶端套接字與服務器套接字連接成功后,通信程序會通過客戶端套接字的輸出流發送數據,并使用服務器套接字的輸入流接收數據。任務8-1-2
實現單客戶端向服務器發送字符串【知識8-7】認知單客戶端向服務器發送字符串的實現方法圖8-10所示為客戶端到服務器的數據流,客戶端套接字與服務器套接字成功連接后,程序會通過客戶端套接字的輸出流發送數據,并使用服務器套接字的輸入流接收數據。在輸入輸出操作中,常用的類有PrintWriter類、getOutputStream類、getInputStream類和BufferedReader類。其中,PrintWriter類具有自動刷新功能,能保證數據按時輸出。服務器端程序從與客戶端連接的套接字中讀取字符串,并將其輸出到屏幕上。服務器將反復進行以下過程。①等待客戶端連接請求。②連接客戶端。③接收并讀取字符串。④斷開與客戶端的連接。⑤返回至步驟①。客戶端套接字首先要成功連接服務器,然后使用其輸出流向服務器發送數據。
圖8-10
客戶端到服務器的數據流8.1服務器端與客戶端套接字的創建及連接8.2基于TCP單向通信的網絡應用程序設計8.4基于TCP雙向通信的網絡應用程序設計學習要點8.3基于TCP多客戶端與服務器通信的網絡應用程序設計8.5基于UDP客戶端相互通信的網絡應用程序設計任務8-1-3
實現單客戶端和服務器相互通信【任務描述】編寫一個雙向通信的Java程序,實現客戶端與服務器的相互通信。當客戶端向服務器發送文件名并請求返回文件內容時,服務器將請求的文件內容回送給客戶端。【知識8-8】認知單客戶端和服務器互相通信的實現方法客戶端與服務器雙向通信的過程如圖8-11所示。這里使用DataInputStream類和DataOutputStream類代替BufferedReader類和PrintWriter類,使用getInputStream類的readUTF()方法讀取數據,使用getOutputStream類的writeUTF()方法寫入數據。圖8-11
客戶端與服務器雙向通信的過程8.1服務器端與客戶端套接字的創建及連接8.2基于TCP單向通信的網絡應用程序設計8.4基于TCP雙向通信的網絡應用程序設計學習要點8.3基于TCP多客戶端與服務器通信的網絡應用程序設計8.5基于UDP客戶端相互通信的網絡應用程序設計任務8-2
通過多客戶端與服務器通信設計石頭剪子布游戲【任務描述】編寫多客戶端與服務器通信的Java程序,實現石頭剪子布游戲,具體要求如下。(1)服務器收到客戶端的連接請求時,會創建新的套接字,并使之與提出連接請求的客戶端連接,并啟動負責數據交換的線程與客戶端實現數據交換。(2)使用一個Vector對象作為套接字管理器,負責管理套接字的個數及連接狀態,套接字管理器將與客戶端連接的套接字添加到列表中,在客戶端斷開連接后,再將對應的套接字從列表中刪除,以保證客戶端連接數與列表中添加的套接字數一致。(3)使用線程實現客戶端與服務器的通信,客戶端從石頭、剪子、布中做出選擇并完成“單擊”動作后,客戶端將向服務器發送信息,并等待服務器的應答。服務器的線程收到客戶端發送的選擇信息后,向客戶端傳送0~2的整型隨機數。客戶端收到服務器的應答后,將比較客戶端與服務器的選擇,并將結果顯示在屏幕上。(4)各個客戶端之間不需要進行通信。游戲規則如下:布優先于石頭,石頭優先于剪子,剪子優先于布。任務8-2
通過多客戶端與服務器通信設計石頭剪子布游戲【知識8-9】多客戶端與服務器互相通信的實現方法多客戶端與服務器的通信如圖8-12所示。每個客戶端都與服務器的一個套接字進行連接,但是各個客戶端之間并不進行通信。服務器收到客戶端的連接請求時,會創建新的套接字,并使之與提出連接請求的客戶端連接,然后啟動線程與客戶端進行數據交換。套接字管理器使用Vector對象管理套接字的個數及連接狀態。圖8-12
多客戶端與服務器的通信8.1服務器端與客戶端套接字的創建及連接8.2基于TCP單向通信的網絡應用程序設計8.4基于TCP雙向通信的網絡應用程序設計學習要點8.3基于TCP多客戶端與服務器通信的網絡應用程序設計8.5基于UDP客戶端相互通信的網絡應用程序設計任務8-3
設計基于UDP的聊天程序【任務描述】編寫基于UDP的聊天程序,該程序不分服務器和客戶端,在兩臺主機上運行的程序基本相同。如果用1臺計算機測試,則需使用不同的端口。UDP通信不同于流式通信方式,它是建立在IP上的無連接協議,使用數據報傳輸信息,雖然傳輸信息的可靠性無法保證,但開銷小、傳輸速度快。使用UDP也可以實現客戶端/服務器程序,UDP的套接字編程不提供監聽功能,也就是說,通信雙方更為平等,面對的接口是完全一樣的。為了使用UDP實現客戶端/服務器結構,可以使用DatagramSocket類中的receive()方法實現類似監聽的功能。Java提供了對UDP通信的支持,包提供了DatagramSocket和DatagramPacket兩個類來支持數據報通信,DatagramSocket類用于在程序之間傳送數據報的通信連接,DatagramPacket類用于表示一個數據報。用數據報方式實現數據通信時,無論是客戶端還是服務器,都要先建立一個DatagramSocket對象,用來接收或發送數據,再使用DatagramPacket類對象作為傳輸數據的載體。任務8-3
設計基于UDP的聊天程序【知識8-10】認知DatagramSocket類的構造方法DatagramSocket類的構造方法如下。(1)DatagramSocket():創建與本地主機某個可用端口相連的DatagramSocket對象。(2)DatagramSocket(intport):創建與指定端口相連的DatagramSocket對象。(3)DatagramSocket(intport,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國網絡安全隔離卡項目創業計劃書
- 中國土雞養殖項目創業計劃書
- 中國紅外線體溫計項目創業計劃書
- 中國家兔項目創業計劃書
- 中國CAE項目創業計劃書
- 中國客戶云計算應用程序項目創業計劃書
- 2025年1月內蒙古高考適應性測試地理試題及答案
- 中國精裝大米項目創業計劃書
- 中國計算機數量控制系統項目創業計劃書
- 中國集成監控系統項目創業計劃書
- 農村網格化管理制度
- 公交站牌制作合同協議書
- 旅行社之間旅游合作合同范本
- 湖南省岳陽市湘陰縣長侖四校2024-2025學年下學期 5月聯考八年級數學試題
- 2025年中考語文7-9年級上冊必背課文【現代文+古詩文】66篇(打印版)
- 鄉鎮養老院建設年度工作規劃
- 魯班獎評選標準試題及答案
- 2025年中國煤炭裝備制造行業分析與發展策略咨詢報告(定制版)
- 2025山東濟南先行投資集團有限責任公司及權屬公司社會招聘169人筆試參考題庫附帶答案詳解
- GB/T 45418-2025配電網通用技術導則
- 中國當代文學專題-003-國開機考復習資料
評論
0/150
提交評論