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

正文內(nèi)容

基于socket的即時通信系統(tǒng)設(shè)計與實現(xiàn)-資料下載頁

2025-07-01 10:57本頁面

【導(dǎo)讀】即時通信軟件的誕生,推動了企業(yè)工作效率的提高,降低了辦公費用,給。企業(yè)的管理帶來了新的思路和方法,并引起了人們對該應(yīng)用領(lǐng)域的關(guān)注。在對即時通信系統(tǒng)的服務(wù)器端和客戶端的主要組成模塊詳細剖析后,論。給出了模塊運行效果圖。系統(tǒng)實現(xiàn)后,對系統(tǒng)進行了功能測試,并分析測試數(shù)據(jù)。實驗數(shù)據(jù)表明,該系統(tǒng)具有易于實現(xiàn)、可靠性高、易于擴展、傳輸效率高等特點,達到了預(yù)定的設(shè)計目標。

  

【正文】 每個請求由特殊字符來區(qū)分 ),響應(yīng)請求, 實現(xiàn) 客戶端與客戶端,客戶端與服務(wù)器實現(xiàn)通信 。 關(guān)鍵模塊詳細設(shè)計與實現(xiàn) 主要對各個功能模塊實現(xiàn)做具體的描述,加深對系統(tǒng)的認識。 利用 Socket 進行 TCP 連接 Socket進行 TCP網(wǎng)絡(luò)連接,是一種客戶 /服務(wù)器的連接類型,利用 Socket的 API進行連接的程序時序 圖 如圖 。 理工大學(xué) 學(xué)士學(xué)位論文 24 圖 Socket 的 TCP 連接時序圖 1.流式套接字 流式套接字可以將數(shù)據(jù)按順序無重復(fù)地發(fā)送到目的地,它提供的是一種可靠的面向連接的數(shù)據(jù)傳輸方式。不管是對單個的數(shù)據(jù)報,還是對數(shù)據(jù)包,流式套接字都提供了一種流式數(shù)據(jù)傳輸,是 TCP傳輸協(xié)議的接口 [12]。 當用戶想發(fā)送大批量數(shù)據(jù)或想讓發(fā)送的數(shù)據(jù)按順序無重復(fù)地到達目的地時,使用流式套接字是最方便的。此外 ,在數(shù)據(jù)傳輸時,如果連接斷開,應(yīng)用程序會被通知的。 由于流式套接字用的是面向連接的協(xié)議,所以必須首先建立連接然后才能從數(shù)據(jù)流中讀出數(shù)據(jù),而不是從一個數(shù)據(jù)報或一個記錄讀出數(shù)據(jù)。 流式套接字的服務(wù)進程和客戶進程在通信前必須創(chuàng)建各自的套接字并建立連接,然后才能對相應(yīng)的套接字進行 “ 讀 ” 、 “ 寫 ” 操作,實現(xiàn)數(shù)據(jù)傳輸。使用流式套接字時,用戶在發(fā)送、接收數(shù)據(jù)之前同樣必須首先建立連接,然后才能傳輸數(shù)據(jù),流式套接字編程模型的工作流程如圖 。 首先,服務(wù)器要創(chuàng)建一個用于監(jiān)聽的套接字,把它綁定到眾所周知的服務(wù)器端口上,TCP 服務(wù)端 Socket() Bind() Listen() 等待客戶請求 Accept() CloseSocket() Recv() Send() Connect() Send() Recv() CloseSocket() Socket() TCP 客戶端 理工大學(xué) 學(xué)士學(xué)位論文 25 然后 調(diào)用 listen 函數(shù)使它處于監(jiān)聽狀態(tài);客戶機在創(chuàng)建套接字后,即可調(diào)用 connect 函數(shù),請求與服務(wù)器套接字連接;服務(wù)器套接字在收到客戶機的連接請求后,調(diào)用 accept 函數(shù)來接收客戶機的連接請求,并創(chuàng)建另一個用于通信的套接字。用此套接字和客戶機上的套接字形成網(wǎng)絡(luò)通信管道的兩個端點,然后就可以在服務(wù)器和客戶機之間進行數(shù)據(jù)傳輸了。服務(wù)器上的監(jiān)聽套接字仍處于監(jiān)聽的狀態(tài),隨時準備接受其他客戶機的連接請求。傳輸結(jié)束后,客戶機調(diào)用 closeSocket 函數(shù)關(guān)閉套接字,服務(wù)器也調(diào)用該函數(shù)關(guān)閉用于監(jiān)聽和通信的套接字,釋放資源 。 2.數(shù)據(jù)報套接字 數(shù)據(jù)報套接字節(jié)提供了不可靠的、無連接的數(shù)據(jù)包通信方式。數(shù)據(jù)通過相互獨立的報文進行傳輸,是無序的,并且不保證報文的可靠、無差錯。實際使用中,數(shù)據(jù)報套接字一般用于一些輕負載的局域網(wǎng)上的計算機之間的通信 , 同一個分組數(shù) 據(jù)報可能不止一次地被發(fā)送,一般要等到接收方發(fā)回確認收到的消息才 停止發(fā)送。對于在 TCP/IP上實現(xiàn)的 Socket,數(shù)據(jù)報套接字節(jié)使用 UDP協(xié)議 [9]。 無連接的服務(wù)器一般都是面向事務(wù)處理的,大多數(shù)的數(shù)據(jù)報套接字應(yīng)用程序?qū)⑹褂靡粋€事件序列來完成客戶應(yīng)用程序和服務(wù)器應(yīng)用程序之間的通信, 其編程過程相對流式套接字要簡單些如圖 。 對于接收端 (一般為服務(wù)器端 ),先用 Socket函數(shù)建立套接字,在通過 bind函數(shù)把這個套接字和準備接收數(shù)據(jù)的 IP地址信息綁定在一起,這和前面流套接字一樣,但不同的是它不必調(diào)用 listen和 accept,只需要等待接收數(shù)據(jù)。并且由于它是無連接的,因此可以接收網(wǎng)絡(luò)上任何一臺機器所發(fā)的數(shù)據(jù)包。圖 、 圖 用程序時序圖。 理工大學(xué) 學(xué)士學(xué)位論文 26 服務(wù)請求 服務(wù)響應(yīng) 圖 流式套接字圖 建立連接 請求數(shù)據(jù) 應(yīng)答數(shù)據(jù) 圖 數(shù)據(jù)報套接字圖 Socket() Bind() 等待客戶請求 Rendform()() Close() Send() Send() Rendform() Close() Bind() Socket() 處理請求 Socket() Bind() Listen() 等待客戶請求 Accept() Close() Rend() Write() Connect() Write() Read() Close() Socket() 理工大學(xué) 學(xué)士學(xué)位論文 27 面向連接的 Socket 機制的模塊設(shè)計 圖 是一個典型的面向連接的 Socket 通信機制的示意圖。它首先由服務(wù)器建立Socket 并將該 Socket 聯(lián)編到某個端口上,并進入監(jiān)聽狀態(tài),同時監(jiān)聽是否有與自己端口相對應(yīng)的連接請求。連接是由客戶發(fā)出的,客戶方在建立自己的 Socket 后,向 服務(wù)器發(fā)出連接請求,服務(wù)器在檢測到連接后接受,這樣就建立了一個完整的 Socket 連接。 從圖 可以看出,服務(wù)器方必須首先啟動,然后守候在某一個端口上監(jiān)聽客戶方的連接請求,一旦連接建立,就可以像普通流機制那樣進行讀 /寫,只需調(diào)用 close()即可結(jié)束 Socket 連接。通過該方式建立起來的 C/S 程序即可實現(xiàn)一臺服務(wù)器端和一臺客戶端的通信。 服務(wù)器端 客戶端 建立連接 服務(wù)請求 圖 41 基于連接的服務(wù)端、客戶端流程圖 圖 創(chuàng)建服務(wù)器端 Sock() 聯(lián)編到某一個端口 調(diào)用 bind 監(jiān)聽來自客戶端的連接請求,調(diào)用 listen 阻塞,等待客戶端連接請求調(diào)用accept() 接 受來自于客戶的請求數(shù)據(jù),調(diào)用 read() 數(shù)據(jù)請求數(shù)據(jù) 返回相應(yīng)的數(shù)據(jù) 調(diào)用 write() 創(chuàng)建服客戶端 Socket() 向服務(wù)器端發(fā)送連接請求 調(diào)用 connect() 發(fā)送請求數(shù)據(jù)調(diào)用 write() 接受響應(yīng)數(shù)據(jù) 理工大學(xué) 學(xué)士學(xué)位論文 28 文件傳輸模塊 1. 文件傳輸?shù)膶崿F(xiàn) 文件傳輸是通過使用多線程、 套接字、自 定義的傳輸命令等技巧,實現(xiàn)了多個用戶之 間 文件傳輸,并可以在傳輸過程 中 進行簡單交互的功能。文件傳輸除了能實現(xiàn)文件的接收與發(fā)送的基本功能外,還需要考慮以下方面: (1) 文件在傳輸過程中應(yīng)不影響用戶界面的操作; (2) 在傳輸文件前,發(fā)送方應(yīng)先發(fā)送請求,接收方可以同意或拒絕文件發(fā) 送,接收方同意后才能進行文件傳輸; (3) 在文件在傳輸過程中,可以顯示文件的信息,如文件名、保存路徑、文件大小; (4) 文件在傳輸過程 中 接收方和發(fā)送方都可以取消該文件傳輸過程 ; (5) 一個用戶可以同時和多個用戶進行文件傳輸,而且每兩個用戶之間,可以同時接收或發(fā)送多個文件,接收和發(fā)送可以同時進行。 本系統(tǒng)文件傳輸?shù)膶崿F(xiàn)主要由 ClientTest、 ClientSocket、 Jprocess和 ServerTest類實現(xiàn)。其中 ServerTest類主要用于發(fā)送文件, ClientTest類用于計算文件的長度、 接收文件,Jprocess類用于生成文件發(fā)送的進度條,文件傳輸功能實現(xiàn)如圖 。 圖 文件傳輸功能實現(xiàn)圖 2. 文件傳輸?shù)膱?zhí)行流程 首先是文件發(fā)送端與接收端啟用發(fā)送線程與監(jiān)聽線程,發(fā)送端向接收端提出連接請求,接收端收到請求后啟用接收線程,接收端在收到文件屬性后,發(fā)送同意接收消息 ,雙方就可以開始發(fā)送與接收文件,直到發(fā)送完畢。 理工大學(xué) 學(xué)士學(xué)位論文 29 本章小結(jié) 本章首先進行了對系統(tǒng)的總體實現(xiàn)方案和類的設(shè)計進行了 研究 , 研究 了它所用到的協(xié)議,其次說明了各類的功能,再說明了系統(tǒng)如何實現(xiàn)各個功能,最后概述了 系統(tǒng)的詳細設(shè)計和具體實現(xiàn)方法,畫出了各部分的圖示。 理工大學(xué) 學(xué)士學(xué)位論文 30 5 對程序進行調(diào)試與測試,并對結(jié)果進行分析 Socket通信的應(yīng)用 結(jié)合上面的 Socket 通信的基本原理,下面用 java 實現(xiàn)了流式 Socket 通信多用戶聊天系統(tǒng) .從總體來看,這是一個支持多 Client 的 Socket 通信的聊天系統(tǒng),根據(jù)設(shè)計過程中服務(wù)器和客戶連接的方式,有兩種解決的方案 ; 方案一 : 在一臺計算機上啟動多個服務(wù)器程序,而指定服務(wù)器監(jiān)聽端口號不同,一個服務(wù)器對應(yīng)一個客戶機 。 方案二 : 將服務(wù)器寫成多線程的, 不同的處理線程為不同的客戶服務(wù) .主線程只負責(zé)循環(huán)等待,處理線程負責(zé)網(wǎng)絡(luò)連接,接收客戶輸入的信息 。 考慮到第一種方案,如果要啟動多個客戶的話,要占用的監(jiān)聽端口號多,通信比第二種方案更不方便,所以下面我是采用第二種方案來實現(xiàn)的 。 聊天服務(wù)器端 聊天服務(wù)端的主要任務(wù)有兩個 : 一是監(jiān)聽某端口,建立與客戶的 Socket 連接,處理一個客戶的連接后,能很快再進入監(jiān)聽狀態(tài) 。二是處理與客戶的通信,由于聊天是客戶之間進行,所以服務(wù)器的職責(zé)是將客戶發(fā)送的消息轉(zhuǎn)發(fā)給其他客戶 。 為了實現(xiàn)兩個目標,必須設(shè)法將任務(wù)分開,可 以借助多線程技術(shù),在服務(wù)方為每個客戶連接建立一個通信線程,通信線程負責(zé)接受客戶的消息并將消息轉(zhuǎn)發(fā)給其他客戶 。 這樣主程序的任務(wù)就簡單化,循環(huán)監(jiān)聽客戶連接,每個客戶連接成功后,創(chuàng)建一個通信線程,并將與 Socket對應(yīng)的輸入輸出流傳給該線程 。 程序代碼如下 : public〔 lass talkserver {public static Client]allclient= nc}v Client[ 20}。//存放所有通信線程 public static int clientnum= 0。 //連接客戶數(shù) public static void main( String args}]) {try{ServerSocket s= nrw ServerSocket( 8000)。//建立監(jiān)聽服務(wù) while(true) {Socket s1= s. accept( ) 。 / /等待客戶連接 理工大學(xué) 學(xué)士學(xué)位論文 31 DataOutputStream los=nc}v DataOutputStream (s1. get0utputStream())。 DatalnputStream din=new DatalnputStream (s1. getInputStream())。 allclient }〔 lientnum }=nc}v Client(dientnum,dos, din)。 allclient } clientnum} . start ( ) 。 //創(chuàng)建與客戶對應(yīng)的通信線 〔 lientnum++。 }}〔 atch( IOException e){} }} 〔 lass Client extends Thread {int id。 //客戶標識 DataOutputStream los。 / /去往客戶的輸出流 DatalnputStream din。 / /來自客戶的輸入流 public Client(int i1, DataOutputStream los, DatalnputStream din) {this. i1= i1。 this. los= los。 this. lin= lin。} public void run() {while( true) / /循環(huán)讀 取客戶數(shù)據(jù)轉(zhuǎn)發(fā)給其他客戶 ( try( int m= talks。二 .clientnum。 / /客戶數(shù) String message=“第” +( id+ 1) +“個客戶發(fā)言 :” +din. readUTF( ) 。 / /讀客戶數(shù)據(jù),無數(shù)據(jù)時線程掛起 。 for(int i= 0。 i m。 i++){ talks。二 .alldient } i}.los. writeUTF ( metesage)。//轉(zhuǎn)發(fā)給其他 戶 }}〔 atch( IOException e){} }}} 每個通信線程均在循環(huán)檢測是否本線程對應(yīng)的客戶有數(shù)據(jù)發(fā)送過來,一旦接收到數(shù)據(jù)就通過循環(huán)將數(shù)據(jù)發(fā)送到所有客戶 (包括自己 )的 Socket 通道 。 理工大學(xué) 學(xué)士學(xué)位論文 32 5. 3 聊天客戶端
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1