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

正文內(nèi)容

基于java的網(wǎng)絡(luò)聊天室-文庫吧

2025-04-17 20:51 本頁面


【正文】 在比較低的層次上通信的。 具體的說:一個(gè)服務(wù)器應(yīng)用程序一般偵聽一個(gè)特定的端口等待客戶端的連接請(qǐng)求,當(dāng)一個(gè)連接請(qǐng)求到達(dá)時(shí),客戶端和服武器端建立一個(gè)通信連接,在連接過程中,客戶端被分配一個(gè)本地端口與一個(gè) Socket 建立連接,客戶端通過寫 Socket 來通知服務(wù)器,以讀 Socket 中的信息,類似的服務(wù)器也獲得一個(gè)本地端口,它需要一個(gè)新的端口號(hào)來偵聽原始端口上的其他連接請(qǐng)求。服務(wù)器也通過它的本地端口連接一個(gè) Socket,通過讀寫和客戶端通信 [8]。 Socket 程序的工作過程: Socket 連接:在通信開始之前由通信雙方確認(rèn)身份,建立一條專用的虛擬連接道。 :利用虛擬連接通道傳送數(shù)據(jù)信息進(jìn)行通 信 。 :通信結(jié)束時(shí),再將所建的虛擬連接拆除。 具體如下: [12] 4 圖 1 Socket 程序的工作過程 三次握手協(xié)議: 第一次握手:原主機(jī)發(fā)送一個(gè)帶有本次連接的序號(hào)的請(qǐng)求的一個(gè)數(shù)據(jù)幀 第二次握手:目的主機(jī)收到請(qǐng)求后,如果同意連接,則發(fā)回一個(gè)帶有一個(gè)本次連接序號(hào)和源端機(jī)連接序列號(hào)的確認(rèn)。 第三此握手:源端機(jī)收到含有兩次初始序列號(hào)的應(yīng)答后,再 向目的主機(jī)發(fā)送一個(gè)帶有兩次連接的序列號(hào)的確認(rèn)。 具體過程如下 : [4] 圖 2 三次握手協(xié)議 1 服務(wù)器 serversocket 2 監(jiān)聽 5 讀 6 寫 7 關(guān)閉 3 客戶端 socket 6 讀 5 寫 7 關(guān)閉 5 開發(fā)環(huán)境 及 工具 本系統(tǒng)所用的工具: 服務(wù)器端:( Windows 平臺(tái))首先應(yīng)有 java 環(huán)境 jdk,建議采用 ; Eclipse。 客戶端: java 環(huán)境 jdk,建議 ; Eclipse。 本系統(tǒng)運(yùn)行所需用到的環(huán)境為 : 硬件配置 : 中央處理器( CPU) : P4 的處理器; 硬 盤: 40GB以上硬盤; 內(nèi) 存: 256以上的 DDR內(nèi)存; 顯 卡: 128M以上 顯存顯卡 軟件 配置 : WINDOWS XP 版本、 AllInOneEclipse31 。 聊天系統(tǒng)的總體設(shè)計(jì)要點(diǎn) 實(shí)現(xiàn)思想 [15] 在 Inter 上的聊天程序一般都是以服務(wù)器提供服務(wù)端 連接響應(yīng),使用者通過客戶端程序登錄到服務(wù)器,就可以與登錄在同一服務(wù)器上的用戶交談,這是一個(gè)面向連接的通信過程。因此,程序要在 TCP/IP 環(huán)境下,實(shí)現(xiàn)服務(wù)器端和客戶端兩部分程序。 服務(wù)器端工作流程 : 服務(wù)器端通過系統(tǒng)調(diào)用創(chuàng)建一個(gè) ServerSocket 與指定的本地端口綁定,就可以在端口進(jìn)行偵聽。如果有客戶端連接請(qǐng)求, 則創(chuàng)建一個(gè) Socket,將客戶端地址賦給這個(gè) Socket。然后登錄成功的客戶就可以在服務(wù)器上聊天了。 客戶端工作流程 : 客戶端程序相對(duì)簡單,只需要建立一個(gè) Socket 與服務(wù)器端連接,成功后通過這個(gè) Socket來發(fā)送和接收數(shù)據(jù)就可以了。 6 系統(tǒng)功能流圖 : 圖 3 系統(tǒng)功能流圖 功能 流程說明如下: (1)啟動(dòng)服務(wù)器程序, 服務(wù)器端創(chuàng)建一個(gè) ServerSocket 對(duì)象,指定端口號(hào)。 (2)ServerSocket 對(duì)象等候客戶端的連接請(qǐng)求。 (3)啟動(dòng)客戶端程序,登錄用戶。如果未注冊,先注冊再登錄。登錄成功進(jìn)入聊天室用戶界面。 (4)客戶端創(chuàng)建一個(gè) Socket 對(duì)象,指定主機(jī)地址和端口號(hào),向服務(wù)器 發(fā) 送連接請(qǐng) 求。 (5)服務(wù)器端收到客戶端請(qǐng)求,建立一條 TCP 連接,再創(chuàng)建一個(gè) Socket 對(duì)象與客戶端 的 Socket 對(duì)象進(jìn)行通信。 (6)服務(wù)器端和客戶端分別建立字節(jié)輸入 /輸出流,進(jìn)行數(shù)據(jù)傳輸準(zhǔn)備。 (7)服務(wù)器端和客戶端通過各自的字節(jié)輸入流獲得對(duì)方發(fā)送過來的數(shù)據(jù),通過字節(jié)輸出 向?qū)Ψ桨l(fā)送數(shù)據(jù)。 (8)一方?jīng)Q定 結(jié)束 通信,向?qū)Ψ桨l(fā)送結(jié)素信息,另一方收到結(jié)束信息后,雙方分別關(guān)閉各自的 TCP連接。 (9)對(duì)象停止等候客戶端連接請(qǐng)求 。 服務(wù)器 serversocket 監(jiān)聽 建立與客戶端連接的套接字 關(guān)閉 服務(wù)器 客戶端 socket 服務(wù)端信息 2.向服務(wù)器 寫 信息 關(guān)閉 客戶端 啟動(dòng) 啟動(dòng) 登錄 注冊 7 多用戶實(shí)時(shí)工作原理圖 [5] 圖 4 多用戶實(shí)時(shí) 工作原理圖 注:服 務(wù)器的 run()方法中采用了 while(true)結(jié)構(gòu),不斷監(jiān)聽客戶端的請(qǐng)求,如收到請(qǐng)求,建立與當(dāng)前請(qǐng)求的客戶端連接的套接字,從而與客戶端建立聯(lián)系。 系統(tǒng)的功能模塊劃分 及設(shè)計(jì)原理 當(dāng)用戶聊天時(shí),將當(dāng)前用戶名、聊天對(duì)象、聊天內(nèi)容和是否私聊進(jìn)行封裝并且序列化,然后與服務(wù)器建立 Socket 連接,再用對(duì)象輸出流包裝 Socket 的輸出流將聊天信息對(duì)象發(fā)送給服務(wù)器端。當(dāng)用戶發(fā)送聊天信息時(shí),服務(wù)端將會(huì)收到客戶端用 Socket 傳輸過來的聊天信息對(duì)象,然后將其強(qiáng)制轉(zhuǎn)換為 Chat 對(duì)象,并將本次用戶的聊天信息對(duì)象添加到聊天 對(duì)象集 Message 中,以供所有聊天用戶訪問。接收用戶的聊天信息是由多線程技術(shù)實(shí)現(xiàn)的,因?yàn)榭蛻舳吮仨殨r(shí)時(shí)關(guān)注更新服務(wù)器上是否有最新消息,在本程序中設(shè)定的是 1秒刷新服務(wù)器一次,如果間隔時(shí)間太短將會(huì)增加客戶端與服務(wù)器端的通信負(fù)擔(dān),而間隔時(shí)間長就會(huì)讓人感覺沒有時(shí)效性,所以經(jīng)過權(quán)衡后認(rèn)為 1 秒最佳,因?yàn)槊總€(gè)用戶都不可能在 1 秒內(nèi)連續(xù)發(fā)送信息。當(dāng)每次用戶接收到聊天信息后將會(huì)開始分析聊天信息然后將適合自己的信息人性化顯示在聊天信息界面上。 服務(wù)器程序模塊 () 服務(wù)器與客戶間通過套接口 Socket(TCP)連接。在 java 中使用套接口相當(dāng)簡單,Java API 為處理套接口的通信提供了一個(gè)類 ,使得編寫網(wǎng)絡(luò)應(yīng)用程序相對(duì)容易。服務(wù)器采用多線程以滿足多用戶的請(qǐng)求,并通過創(chuàng)建一個(gè) ServerSocket 對(duì)象來監(jiān)聽來自客戶的連接請(qǐng)求,默認(rèn)端口為 8000,然后無限循環(huán)調(diào)用 accept()方法接受客戶程序的連接。 服務(wù)器具有以下功能 : (1)啟動(dòng)服務(wù),建立偵聽,接受客戶端連接。 (2)從流中讀取經(jīng)過序列化的對(duì)象。 (3)分析 讀取的對(duì)象進(jìn)行相應(yīng)的操作(登錄信息的驗(yàn)證反饋、注冊信息的驗(yàn) 證和反饋、轉(zhuǎn)發(fā)聊天信息等) (4)向客戶端發(fā)送 系統(tǒng) 消息。 (5)保存日志 (6)關(guān)閉服務(wù),并向客戶端發(fā)送服務(wù)器關(guān)閉消息。 服務(wù)器程序模塊源碼: 8 ServerSocket serverSocket。 //服務(wù)器套接字 static Vector u=new Vector(1,1)。 //初始聊天用戶對(duì)象集 static Vector v=new Vector(1,1)。 //初始聊天信息對(duì)象集 public void run() { Try //無限循環(huán)實(shí)現(xiàn)多線程,實(shí)現(xiàn)與多個(gè)用戶的 同時(shí)連接 while(true) { //監(jiān)聽并接受客戶的請(qǐng)求 Socket client = ()。 //繼承 Thread 支持多線程 new Connection(client,u,v)。 }} catch(IOException e) {fail(e,不能監(jiān)聽! )。} } 當(dāng)用戶發(fā)送聊天信息時(shí),服務(wù)端將會(huì)收到客戶端用 Socket 傳輸過來的聊天信息對(duì)象,然后將其強(qiáng)制轉(zhuǎn)換為 Chat 對(duì)象,并將本次用戶的聊天信息對(duì)象添加到聊天對(duì)象集Message 中,以供所有聊天用戶訪問。 登錄程序模塊( ) 是客戶端程序登錄界面,負(fù)責(zé)用戶帳號(hào)信息的驗(yàn)證與接收服務(wù)器的反饋??蛻舳苏?qǐng)求連接,服務(wù)器的 accept()方法建立與客戶端的套接字連接??蛻舳藢⒌卿浶畔⒎庋b成Customer 對(duì)象通過輸出流 發(fā)送服務(wù)器,等待服務(wù)器的驗(yàn)證,服務(wù)器反饋驗(yàn)證信息,客戶端根據(jù)反饋信息進(jìn)行登錄和登錄信息錯(cuò)誤處理。 關(guān)鍵代碼如下: try { //連接到服務(wù)器 Socket toServer。 toServer = new Socket(strServerIp,1001)。 //寫客戶詳細(xì)資料到服務(wù)器 socket ObjectOutputStream streamToServer=new ObjectOutputStream (())。 ((Customer)data)。 //讀來自服務(wù)器 socket的登錄狀態(tài) BufferedReader fromServer=new BufferedReader(new InputStreamReader(()))。 String status=()。 } 注冊程序模塊 () 為客戶端程序注冊界面,負(fù)責(zé)用戶帳號(hào)信息的注冊驗(yàn)證與反饋。注冊模塊的原理跟登錄模塊基本相同。注冊信息封裝成 Register_Customer 對(duì)象,但服務(wù)器只驗(yàn)證用戶名,且只要求用戶名不重復(fù),服務(wù)器檢驗(yàn)注冊信息文件中的用戶名,若不重復(fù)則反饋?zhàn)猿晒Φ男畔ⅰF渌淖孕?息(密碼、年齡、郵箱)合法性都交給注冊模塊自己完成。 9 客戶 聊天主 程序模塊 () 客戶通過 Socket(IAddress,port)建立與服務(wù)器的連接??蛻舳送ㄟ^構(gòu)造ObjectInputstream,ObjectOutputstream 與服務(wù)器建立輸入輸出流,然后雙方通過該輸入輸出流來相互傳遞信息,服務(wù)器一旦收到客戶方的連接請(qǐng)求,服務(wù)器 accept()方法返回一個(gè)新建的 Socket 對(duì)象??蛻舳私邮芊?wù)器傳來的聊天信息進(jìn)行處理后顯示在自己的聊天紀(jì)錄中。同樣客戶端要發(fā)送文件和信 息時(shí)也向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器同樣通過accept()方法返回一個(gè) Socket 對(duì)象,客戶端就可也進(jìn)行相應(yīng)的操作。 聊天客戶端必須具有以下功能。 (1)連接服務(wù)器,發(fā)送用戶登陸請(qǐng)求。 (2)向服務(wù)器發(fā)送聊天信息。 (3)接收服務(wù)器轉(zhuǎn)發(fā)的了信息。 (4)接受服務(wù)器發(fā)送的系統(tǒng)消息。 關(guān)鍵源碼如下: public void run() { try { while (true) { Socket toServer。 toServer = new Socket(strServerIp, 1001)。 // 將信息發(fā)往服務(wù)器 Message messobj = new Message()。 ObjectOutputStream streamtoserver = new ObjectOutputStream( ())。 ((Message) messobj)。 // 收來自服務(wù)器的信息 ObjectInputStream streamfromserver = new ObjectInputStream( ())。 messobj = (Message) streamfromserver; } } } 因?yàn)槭褂昧?while(true)無限循環(huán),使得客戶端能不斷更新聊天紀(jì)錄,實(shí)現(xiàn)了實(shí)時(shí)聊天。這里我們設(shè)置的更新周期為 1s,這樣使服務(wù)器的負(fù)擔(dān)不會(huì)太重, 1s的等待時(shí)間也使得用戶能夠接受。 音樂播放程序模塊 根據(jù) JAVA 系統(tǒng)餓 MIDI 功能來創(chuàng)建一個(gè) Sequencer 對(duì)象,使用 Javasound 來處理MIDI 聲音文件。在創(chuàng)建好 Sequence 類對(duì)象之后,就可以播放該 MIDI 聲音文件了,播放的步驟如下: (1)調(diào)用音序器( Sequence 對(duì)象)中的 open()方法,使聲音播放設(shè)備處于準(zhǔn)備狀態(tài); (2)調(diào)用音序器的 start()方法,開始播放聲音文件; (3)調(diào)用 close()方法結(jié)束播放,并釋放資源。 在線程使用 while()做到循環(huán)播放,在音樂播放和停止的控制上,通過控制線程中while() 的條件來實(shí)現(xiàn),具體參見代碼。 10 4. 系統(tǒng)實(shí)現(xiàn)與最終效果 系統(tǒng)工作的過程: 本 系統(tǒng) 的編譯環(huán)境,及編寫平臺(tái)為 java.。主要用到的類為 包中的 Socket類。編寫了多個(gè)圖形界面,包括服務(wù)器界面,客戶端聊天界面,登錄界面,注冊界面,音樂播放器界面等。 以服務(wù)器所在的主機(jī)的 ip 為“ ”所偵聽的端口號(hào)為“ 8000”。分別先后啟動(dòng)服務(wù)器和客戶端應(yīng)用程序,客戶端用戶填入登錄信息,當(dāng)服務(wù)器收到客戶端的登錄請(qǐng)求后,若驗(yàn)證登錄信息正確,則向客戶端發(fā)送一個(gè)反饋一個(gè)登錄成功的消息,客戶端和服務(wù)器通過套接字建立了聯(lián)系。建立連接后雙方就可以相互通信:客戶端在自己的 文本框輸入要發(fā)送 的信息點(diǎn)擊發(fā)送后,發(fā)送的信息就會(huì)顯示在服務(wù)器和目的客戶端的文本域中,同樣服務(wù)器也 可以在自己的文本框輸入系統(tǒng)信息,點(diǎn)擊發(fā)送信息按鈕后,發(fā)送的信
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1