freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

java聊天系統(tǒng)的開發(fā)和研究—免費(fèi)畢業(yè)設(shè)計(jì)論文(編輯修改稿)

2025-01-04 06:09 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 在同一端口上可以響應(yīng) 若干客戶端請(qǐng)求,由于不同的客戶端對(duì)應(yīng)于不同的主機(jī)地址和端口號(hào),所以這仍然具有套接字的唯一性。 客戶端套接字 客戶端 /服務(wù)器是一種網(wǎng)絡(luò)服務(wù)模式。在該模式中,客戶機(jī)和服務(wù)器之間需要定義一套通信協(xié)議,并創(chuàng)建一個(gè) Socket 類,利用這個(gè)類來建立一條可靠的鏈接;然后,客戶端 /服務(wù)器再在這條連接上可靠地傳輸數(shù)據(jù)??蛻舳税l(fā)出請(qǐng)求,服務(wù)器監(jiān)聽來自客戶機(jī)的請(qǐng)求,并為客戶端提供響應(yīng)服務(wù)。利用 Socket 類,我們可以輕松地實(shí)現(xiàn)網(wǎng)絡(luò)客戶端程序的編寫, Socket 類的一些常用的方法匯總?cè)缦拢? getLocalAddress() 讀取套接字對(duì)象的本地地址 getLocalPort() 讀取套接字所使用的本地端口號(hào) getInputStream() 得到一個(gè)輸入流 getOutputStream() 得到一個(gè)輸出流 通常情況下,客戶端只要能夠順序處理服務(wù)器程序的響應(yīng)就可以了,因此客戶端程 序通常不使用多線程。 服務(wù)器端套接字 實(shí)現(xiàn)套接字的服務(wù)端,需要使用 ServerSocket 類。 ServerSocket 類是服務(wù)器程序的運(yùn)行基礎(chǔ),它允許程序綁定一個(gè)端口號(hào)來監(jiān)聽客戶端的請(qǐng)求,一旦產(chǎn)生客戶端請(qǐng)求,它將接受 這一請(qǐng)求,同時(shí)產(chǎn)生一個(gè)完整的 Socket 連接對(duì)象。服務(wù)器綁定的端口必須公開,以便讓客戶端程序知道如何連接這個(gè)服務(wù)器。同時(shí),作為服務(wù)器,它必須能夠接收多個(gè)客戶的請(qǐng)求,這就需要為服務(wù)器設(shè)置一個(gè)請(qǐng)求隊(duì)列,如果服務(wù)器不能馬上響應(yīng)客戶端的請(qǐng)求,要將這個(gè)請(qǐng)求放進(jìn)請(qǐng)求隊(duì)列中,等服務(wù)器將當(dāng)前的請(qǐng)求處理完,會(huì)自動(dòng)到請(qǐng)求隊(duì)列中按照先后順序取出請(qǐng)求進(jìn)行處理。服務(wù)器的資源是有限的,這就導(dǎo)致它的最大連接數(shù)是有限的,通過ServerSocket 的構(gòu)造函數(shù)可以指定這個(gè)最大連接數(shù)。如果不明 徐州工程學(xué)院畢業(yè)設(shè)計(jì) (論文 )確指定這個(gè)連接數(shù), 默認(rèn)最大連接數(shù)為 50,也就是說,客戶端的請(qǐng)求隊(duì)列最大可以容納 50 個(gè)請(qǐng)求,當(dāng)超過這個(gè)最大連接數(shù)時(shí),用戶的請(qǐng)求將不再會(huì)被響應(yīng)。利用 SocketServer 也提供了一些方法,它們主要有: accept() 返回一個(gè) “已連接 ”的 Socket 對(duì)象 getIAddress() 得到該服務(wù)器的 IP 地址 getLocalPort() 得到服務(wù)器所偵聽的端口號(hào) setSoTimeout() 設(shè)置服務(wù)器超時(shí)時(shí)間 getSoTimeout() 得到服務(wù)器超時(shí)時(shí)間 由于存在單個(gè)服務(wù)程序與多個(gè)客戶程序通信的可能,所以服 務(wù)程序要響應(yīng)客戶程序 不應(yīng)該花很多時(shí)間,否則客戶程序在得到服務(wù)前有可能花很多時(shí)間來等待通信的建立,然而服務(wù)器程序和客戶程序的會(huì)話可能很長(zhǎng),因此,為加快對(duì)客戶程序連接請(qǐng)求的響應(yīng),典型的方法是服務(wù)器主機(jī)運(yùn)行一個(gè)后臺(tái)線程,這個(gè)后臺(tái)線程處理服務(wù)器和客戶端程序的通信。這一點(diǎn)和客戶端的程序設(shè)計(jì)是不同的。 數(shù)據(jù)報(bào)通信 現(xiàn)代網(wǎng)絡(luò)通信主要基于 TCP/IP 和 UDP 協(xié)議。它們都是建立在更底層的 IP 協(xié)議之上的兩種通信傳輸協(xié)議。前者是以數(shù)據(jù)流的形式,將傳輸數(shù)據(jù)經(jīng)分割、打包后,通過兩臺(tái)機(jī)器之間建立起的虛電路。進(jìn)行連續(xù)的 、雙向的、嚴(yán)格保證數(shù)據(jù)正確性的傳輸協(xié)議;后者已數(shù)據(jù)報(bào)形式,對(duì)拆分后的數(shù)據(jù)的先后順序不做要求的文件傳輸協(xié)議。雖然 TCP 協(xié)議提供了有序的、可預(yù)測(cè)和可靠的信息包數(shù)據(jù)流,但是這樣做的代價(jià)也很大。 TCP 包含很多在擁擠的網(wǎng)絡(luò)中處理?yè)砣刂频膹?fù)雜算法以及信息丟失的預(yù)測(cè),這導(dǎo)致了這樣傳輸數(shù)據(jù)的方式效率很差。因此,數(shù)據(jù)報(bào)通信方式是一種可選的替代方法。多點(diǎn)聊天系統(tǒng)是以 UDP 協(xié)議進(jìn)行發(fā)送和接受消息的,采用 C/S 模型實(shí)現(xiàn),使之更適合局域網(wǎng)的網(wǎng)絡(luò)程序。 C/S 模型主要由客戶應(yīng)用程序、服務(wù)器控制程序兩部分組成。在網(wǎng)絡(luò)上傳輸?shù)男?息,不僅限于聊天信息,還有各種控制信息,用以標(biāo)識(shí)發(fā)送者用戶名、 IP 地址和接收者用戶名、 IP 地址等信息。利用數(shù)據(jù)報(bào)傳送,但受其長(zhǎng)度限制,通常必須將數(shù)據(jù)分解為多個(gè)包,在目的地再重新組合,而這一切在傳輸過程中會(huì)出現(xiàn)大量的問題。 Socket 對(duì)象封裝了這一切,讓程序員可以將網(wǎng)絡(luò)連接視為另一種可以讀取字節(jié)的流。數(shù)據(jù)報(bào)通信協(xié)議 UDP 是一種非面向連接的提供不可靠的數(shù)據(jù)包式的數(shù)據(jù)傳輸協(xié)議,類似于從郵局發(fā)送信件的過程,信件只要放到郵箱就算完成任務(wù)。這說明了一旦數(shù)據(jù)報(bào)被釋放給它們預(yù)定的目標(biāo),不保證它們一定達(dá)到目的地,甚至 不保證一定存在數(shù)據(jù)的接受者。同樣,數(shù)據(jù)報(bào)被接收時(shí),不保證它在傳輸過程不受損壞,不保證發(fā)送它的機(jī)器仍在等待響應(yīng)。此外,數(shù)據(jù)報(bào)傳輸有大小限制,每個(gè)傳輸?shù)臄?shù)據(jù)報(bào)必須保證在 64KB 之內(nèi)。 Java 通過 DatagramPacket 和 DatagramSocket 兩個(gè)類來實(shí)現(xiàn) UDP 協(xié)議頂層的數(shù)據(jù)報(bào)。 DatagramPacket 生成的對(duì)象表示一個(gè)數(shù)據(jù)報(bào),而 DatagramSocket 是用來發(fā)送和接受數(shù)據(jù)包的類。生成 DatagramPacket 對(duì)象可以用下面四個(gè)構(gòu)造函數(shù): DatagramPacket(byte data[],int size) DatagramPacket(byte data[],int offset, int size) DatagramPacket(byte data[],int size, IAddress ipAddress,int port) DatagramPacket(byte data[],int offset, int size, IAddress ipAddress,int port) 第一個(gè)構(gòu)造函數(shù)指定了接受數(shù)據(jù)的緩沖區(qū)和信息包的容量大小。它通過DatagramSocket 接收數(shù)據(jù)。第二種形式允許你在存儲(chǔ)數(shù)據(jù)的緩沖區(qū)中指定一個(gè)偏移量。第三種形式指定一個(gè)于 DatagramSocket 決定信息包將被送往何處的目標(biāo)地址和端口。其中 IAddress 類為表示 IP 地址的類。第四種形式從數(shù)據(jù)中指定的偏移量位置開始傳輸數(shù)據(jù)包。對(duì)于 DatagramPacket 的內(nèi)部狀態(tài),可以用如下方法獲得。這些方法對(duì)數(shù)據(jù)包的目標(biāo)地址和端口號(hào)以及原始數(shù)據(jù)和數(shù)據(jù)長(zhǎng)度有完全的使用權(quán),下面列舉出這些方法: IAddress getAddress() 返回目標(biāo)文件 IAddress,一般用于發(fā)送 int getPort() 返回端口號(hào) byte[] getData() 返回包含在數(shù)據(jù)包中的字節(jié)數(shù)據(jù)。多用于在接收數(shù)據(jù)之后從數(shù)據(jù)包來檢索數(shù)據(jù)int getLength() 返回包含在將從 getData()方法返回的字節(jié)數(shù)組的有效數(shù)據(jù)長(zhǎng)度。通常它與整個(gè)字節(jié)數(shù)組長(zhǎng)度不等。前面說過, DatagramSocket 類用來發(fā)送和接收數(shù)據(jù)包。因此,在用數(shù)據(jù)報(bào)方式編寫客戶端 / 服務(wù)器端程序時(shí), 無(wú)論是在客戶端和是服務(wù)器端, 首先需要建立 DatagramSocket 對(duì)象,用來接收和發(fā)送數(shù)據(jù)報(bào),然后使用 DatagramPacket 類對(duì)象作為傳輸數(shù)據(jù)的載體。 DatagramSocket 類常用的構(gòu)造函數(shù)如下: DatagramSocket() DatagramSocket(int port) DatagramSocket(int port,IAddress ipAddress) 通常, DatagramSocket 接受數(shù)據(jù)報(bào)要用 receive(DatagramPacket p)方法,而發(fā)送數(shù)據(jù)報(bào)則使用 send(DatagramPacket p)方法,這兩個(gè)方法是DatagramPacket 十分常見的方 法。要發(fā)送一個(gè)數(shù)據(jù)報(bào),首先創(chuàng)建一個(gè)DatagramPacket,指定要發(fā)送的數(shù)據(jù)、數(shù)據(jù)的長(zhǎng)度、數(shù)據(jù)要發(fā)送至哪個(gè)主機(jī)及該主機(jī)的哪個(gè)端口,然后再用 DatagramSocket 的 send()方法發(fā)送數(shù)據(jù)包;要接收一個(gè)數(shù)據(jù)報(bào),首先必須創(chuàng)建一個(gè)在本地主機(jī)的特定端口上偵聽的DatagramSocket,此套接字只能接受發(fā)送至特定端口上的數(shù)據(jù)包。在 Windos 操作系統(tǒng)中 ,已經(jīng)為網(wǎng)絡(luò)通信提供了 動(dòng)態(tài)鏈接庫(kù) ,即 API 函數(shù)。通過Socket,可以調(diào)用這些 API 函數(shù),從而實(shí)現(xiàn)網(wǎng)絡(luò)通信。尋呼系統(tǒng)在通信 時(shí)可以使用 UDP 協(xié)議,也可以使用 TCP 協(xié)議,本章將分別介紹利用 UDP 協(xié)議和 TCP 協(xié)議的通信原理。 無(wú)連接的客戶 /服務(wù)器程序工作流程 在 Windos 操作系統(tǒng)中 ,已經(jīng)為網(wǎng)絡(luò)通信提供了 動(dòng)態(tài)鏈接庫(kù) ,即API 函數(shù)。通過 Socket,可以調(diào)用這些 API 函數(shù),從而實(shí)現(xiàn)網(wǎng)絡(luò)通信。多鼎足之勢(shì)聊天系統(tǒng)在通信時(shí)使用 UDP 協(xié)議。下面簡(jiǎn)單介紹利用 UDP 協(xié)議的通信流程。無(wú)連接的客戶 /服務(wù)器工作模式使用 UDP 協(xié)議進(jìn)行數(shù)據(jù)傳輸。 UDP 協(xié)議是英文UserDatagram Protocol 的縮寫,即用戶數(shù)據(jù)報(bào)協(xié)議,雙方通信之前不需要建立連接。主要用來支持那些需要在計(jì)算機(jī)之間快速傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用,如各類網(wǎng)絡(luò)管理和網(wǎng)絡(luò)控制數(shù)據(jù)都是利用 UDP 協(xié)議傳送,那些需要一對(duì)多或廣播通信的應(yīng)用更是 UDP 的用武之地, 如網(wǎng)絡(luò)視頻會(huì)議就是利用 UDP 協(xié)議傳送的。 UDP 協(xié)議直接位于 IP(網(wǎng)際協(xié)議)協(xié)議的頂層,該協(xié)議的主要作用是將網(wǎng)絡(luò)數(shù)據(jù)流壓縮成數(shù)據(jù)報(bào)的形式并交網(wǎng)絡(luò)層發(fā)送出去。 UDP協(xié)議自問世至今,始終是一個(gè)經(jīng)濟(jì)、實(shí)用的網(wǎng)絡(luò)傳輸層協(xié)議,使用 UDP 協(xié)議的客戶 /服務(wù)器工作模型如圖 所示。 圖 無(wú)連接的客戶 /服務(wù)器工作模型 要通過互聯(lián)網(wǎng)進(jìn)行通信,系統(tǒng)至少需要一對(duì)套接字,其中一個(gè)運(yùn)行于客戶機(jī)端,我們稱之為 ClientSocket,另一個(gè)運(yùn)行于服務(wù)器端,我們稱之為ServerSocket。 Client1 通過與 SocketServer 通訊,可得知其 IP 地址Client1IP, Client2 也通過與 SocketServer 通訊,也可得知其 IP 地址Client2IP。兩個(gè) IP 地址可存放地址列表里。每個(gè) Client 建立兩個(gè) UDP 和利用兩個(gè)端口,一個(gè)用來發(fā)送數(shù)據(jù)給另一個(gè) Client,一個(gè)用 來接收從另一個(gè) Client 的數(shù)據(jù)。 SocketServer 將 Client2IP 發(fā)給 Client1,這樣 Client1 用 SendUDP 向Client2IP 發(fā)送數(shù)據(jù), Client2 用 recievedUDP 接收數(shù)據(jù)。反之,也行。 多線程編程 Java 支持內(nèi)置多線程編程。多線程程序包括兩條或兩條以上并發(fā)運(yùn)行的部分。程序中每個(gè)這樣的部分都叫一個(gè)線程,每個(gè)線程都是獨(dú)立的執(zhí)行路徑。因此,多線程是多任務(wù)處理的一種特殊形式。多任務(wù)處理有兩種截然不同的類型:基于進(jìn)程的和基于線程的。進(jìn)程本質(zhì)上一個(gè)正在 執(zhí)行的程序。因此,基于進(jìn)程的多任務(wù)處理的特點(diǎn)是允許你的計(jì)算機(jī)同時(shí)運(yùn)行兩個(gè)或更多的程序。舉例來說,基于進(jìn)程的讀任務(wù)處理使你在運(yùn)行文本編輯器的時(shí)候可以同時(shí)運(yùn)行 Java 編譯器。在基于進(jìn)程的多任務(wù)處理中,程序是調(diào)度程序多分派的最小代碼。也就是說,進(jìn)程是資源申請(qǐng)、調(diào)度和獨(dú)立運(yùn)行的單位,因此,它使用系統(tǒng)中的運(yùn)行資源。在基于線程的多任務(wù)處理環(huán)境中,線程是最小的執(zhí)行單位。線程是進(jìn)程中的一個(gè)單一的連續(xù)控制流程。一個(gè)進(jìn)程可以擁有多個(gè)線程。這意味著一個(gè)程序可以同時(shí)執(zhí)行兩個(gè)或多個(gè)任務(wù)的功能。例如,一個(gè)文本編輯器可以在打印的同時(shí)格 式化文本。所以,多進(jìn)程程序處理大局問題,而多線程程序處理細(xì)節(jié)問題。多線程程序比多進(jìn)程程序需要更少的管理開銷。進(jìn)程是重量級(jí)的任務(wù),需要分配它們自己獨(dú)立的地址空間。進(jìn)程間通信是昂貴和受限的。進(jìn)程間的轉(zhuǎn)換也是很需要花費(fèi)的。另一方面,線程是輕量級(jí)的選手,它和進(jìn)程一樣擁有獨(dú)立的執(zhí)行控制,由操作系統(tǒng)負(fù)責(zé)調(diào)度。區(qū)別在于線程沒有獨(dú)立的存儲(chǔ)空間,而是和所屬進(jìn)程的其他線程共享一個(gè)存儲(chǔ)空間,因此,線程間通信是容易的,線程間的轉(zhuǎn)換也是低開銷的。當(dāng) Java 程序使用多進(jìn)程的任務(wù)處理環(huán)境時(shí),多進(jìn)程的程序不受 Java 的控制,而多線程則 受控于 Java。 多線程可以幫會(huì)你寫出 CPU 最大利用率的高效程序,因?yàn)榭臻e時(shí)間保持最低。這對(duì) Java 運(yùn)行的交互式的網(wǎng)絡(luò)互聯(lián)環(huán)境至關(guān)重要,因?yàn)榭臻e時(shí)間是公共的,舉個(gè)例子來說,網(wǎng)絡(luò)的數(shù)據(jù)處理傳輸速率遠(yuǎn)低于計(jì)算機(jī)處理能力,本地文件系統(tǒng)資源的讀寫速度遠(yuǎn)低于 CPU 的處理能力,當(dāng)然,用戶輸入也比計(jì)算機(jī)慢的多。在傳統(tǒng)的單線程環(huán)境中,你的程序必須等待每一個(gè)這樣的任務(wù)完成以后才能執(zhí)行下一步 — 盡管 CPU 有很多空閑時(shí)間。多線程是你能夠獲得并充分利用這些空閑時(shí)間。 多線程編程簡(jiǎn)單,效率高 (能直接共享數(shù)據(jù)和資源,而多進(jìn)程 卻不能 ) 適合于開發(fā)多種交互接口的程序 減輕編寫交互頻繁,涉及面多的程序的困難 在本系統(tǒng)中,設(shè)置后臺(tái)線程處理服務(wù)器和客戶程序的通信。服務(wù)器資源以輕量級(jí)的線程提供,和多個(gè)客戶線程并發(fā)連接通信。這樣可以減輕服務(wù)器端的開銷,同時(shí)保證了多個(gè)用戶端連接能夠得到快速而高效的服務(wù)。 總體設(shè)計(jì)是回答“概括地說,系統(tǒng)應(yīng)該如何實(shí)現(xiàn)?”這個(gè)問題。它要完成的主要任務(wù)是劃分出組成系統(tǒng)的物理元素,設(shè)計(jì)軟件結(jié)構(gòu),也就是確定系統(tǒng)中每個(gè)程序是由哪些模塊組成,以及各個(gè)模塊之間的關(guān)系。 系統(tǒng)通信模型與拓?fù)浣Y(jié)構(gòu)設(shè) 計(jì) 即時(shí)通訊系統(tǒng)的一般模型 即時(shí)通訊服務(wù)有兩個(gè)實(shí)體:發(fā)送者和接受者。即時(shí)通訊協(xié)議定義了即時(shí)通訊服務(wù)、發(fā)信者和接受者之間的交互作用。即時(shí)通訊服務(wù)與其他郵件服務(wù)不同之處在于,即時(shí)消息本身足夠的小,便于快速交付到接受者。個(gè)體,用戶代理,即時(shí)通訊系統(tǒng)的模型用圖 51 表示 圖 51 即時(shí)通信系統(tǒng)的一般模型 該模型顯示了通信
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1