資源簡介
java聊天室程序源碼
2 需求分析
2.1 業(yè)務(wù)需求
1. 與聊天室成員一起聊天。
2. 可以與聊天室成員私聊。
3. 可以改變聊天內(nèi)容風(fēng)格。
4. 用戶注冊(cè)(含頭像)、登錄。
5. 服務(wù)器監(jiān)控聊天內(nèi)容。
6. 服務(wù)器過濾非法內(nèi)容。
7. 服務(wù)器發(fā)送通知。
8. 服務(wù)器踢人。
9. 保存服務(wù)器日志。
10.保存用戶聊天信息。
2.2 系統(tǒng)功能模塊
2.2.1 服務(wù)器端
1.處理用戶注冊(cè)
2.處理用戶登錄
3.處理用戶發(fā)送信息
4.處理用戶得到信息
5.處理用戶退出
2.2.2 客戶端
1.用戶注冊(cè)界面及結(jié)果
2.用戶登錄界面及結(jié)果
3.用戶發(fā)送信息界面及結(jié)果
4.用戶得到信息界面及結(jié)果
5.用戶退出界面及結(jié)果
2.3 性能需求
運(yùn)行環(huán)境:Windows 9x、2000、xp、2003,Linux
必要環(huán)境:JDK 1.5 以上
硬件環(huán)境:CPU 400MHz以上,內(nèi)存64MB以上
3.1.2 客戶端結(jié)構(gòu)
ChatClient.java 為客戶端程序啟動(dòng)類,負(fù)責(zé)客戶端的啟動(dòng)和退出。
Login.java 為客戶端程序登錄界面,負(fù)責(zé)用戶帳號(hào)信息的驗(yàn)證與反饋。
Register.java 為客戶端程序注冊(cè)界面,負(fù)責(zé)用戶帳號(hào)信息的注冊(cè)驗(yàn)證與反饋。
ChatRoom.java 為客戶端程序聊天室主界面,負(fù)責(zé)接收、發(fā)送聊天內(nèi)容與服務(wù)器端的Connection.java 親密合作。
Windowclose 為ChatRoom.java的內(nèi)部類,負(fù)責(zé)監(jiān)聽聊天室界面的操作,當(dāng)用戶退出時(shí)返回給服務(wù)器信息。
Clock.java 為客戶端程序的一個(gè)小程序,實(shí)現(xiàn)的一個(gè)石英鐘功能。
3. 2 系統(tǒng)實(shí)現(xiàn)原理
當(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è)定的是3秒刷新服務(wù)器一次,如果間隔時(shí)間太短將會(huì)增加客戶端與服務(wù)器端的通信負(fù)擔(dān),而間隔時(shí)間長就會(huì)讓人感覺沒有時(shí)效性,所以經(jīng)過權(quán)衡后認(rèn)為3秒最佳,因?yàn)槊總€(gè)用戶都不可能在3秒內(nèi)連續(xù)發(fā)送信息。
當(dāng)每次用戶接收到聊天信息后將會(huì)開始分析聊天信息然后將適合自己的信息人性化地顯示在聊天信息界面上。
4.1.1 問題陳述
1.接受用戶注冊(cè)信息并保存在一個(gè)基于文件的對(duì)象型數(shù)據(jù)庫。
2.能夠允許注冊(cè)過的用戶登陸聊天界面并可以聊天。
3.能夠接受私聊信息并發(fā)送給特定的用戶。
4.服務(wù)器運(yùn)行在自定義的端口上#1001。
5.服務(wù)器監(jiān)控用戶列表和用戶聊天信息(私聊除外)。
6.服務(wù)器踢人,發(fā)送通知。
7.服務(wù)器保存日志。

代碼片段和文件信息
import?java.io.*;
import?java.net.*;
import?java.util.*;
/**
?*?
?*?title:?HappyChat聊天系統(tǒng)服務(wù)器程序
?*?
?*?
?*?Description:?聊天服務(wù)器
?*?
?*?
?*?Copyright:?Copyright?(c)?2006
?*?
?*?
?*?Filename:?AppServer.java
?*?
?*?創(chuàng)建服務(wù)器
?*?
?*?@version?1.0
?*?
?*/
public?class?AppServer?extends?Thread?{
private?ServerSocket?serverSocket;
private?Serverframe?sframe;
private?static?Vector?userOnline?=?new?Vector(1?1);
private?static?Vector?v?=?new?Vector(1?1);
/**
?*?創(chuàng)建服務(wù)器?啟動(dòng)服務(wù)監(jiān)聽1001端口
?*?
?*/
public?AppServer()?{
sframe?=?new?Serverframe();
try?{
serverSocket?=?new?ServerSocket(1001);
//?獲取服務(wù)器的主機(jī)名和IP地址
InetAddress?address?=?InetAddress.getLocalHost();
sframe.txtServerName.setText(address.getHostName());
sframe.txtIP.setText(address.getHostAddress());
sframe.txtPort.setText(“1001“);
}?catch?(IOException?e)?{
fail(e?“不能啟動(dòng)服務(wù)!“);
}
sframe.txtStatus.setText(“已啟動(dòng)...“);
this.start();?//?啟動(dòng)線程
}
/**
?*?退出服務(wù)器
?*?
?*?@param?e
?*????????????異常
?*?@param?str
?*????????????退出信息
?*/
public?static?void?fail(Exception?e?String?str)?{
System.out.println(str?+?“?。“?+?e);
}
/**
?*?監(jiān)聽客戶的請(qǐng)求,當(dāng)有用戶請(qǐng)求時(shí)創(chuàng)建?Connection線程
?*/
public?void?run()?{
try?{
while?(true)?{
//?監(jiān)聽并接受客戶的請(qǐng)求
Socket?client?=?serverSocket.accept();
new?Connection(sframe?client?userOnline?v);?//?支持多線程
//?System.out.println(“userLength:“+userLength);
}
}?catch?(IOException?e)?{
fail(e?“不能監(jiān)聽!“);
}
}
/**
?*?啟動(dòng)服務(wù)器
?*/
public?static?void?main(String?args[])?{
new?AppServer();
}
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????1048576??2008-04-18?06:15??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\Data\chat_Data.MDF
?????文件????1048576??2008-04-18?06:15??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\Data\chat_Log.LDF
?????文件????????429??2008-04-22?21:24??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\.classpath
?????文件????????384??2008-04-22?21:24??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\.project
?????文件????????621??2008-04-22?21:24??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\aaa_message.txt
?????文件???????2355??2008-04-22?21:24??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\AppServer.class
?????文件???????1765??2008-04-22?21:24??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\AppServer.java
?????文件?????????33??2008-04-22?21:24??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\badword.txt
?????文件????????658??2008-04-22?21:24??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\ccc_message.txt
?????文件?????947570??2008-04-22?21:24??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\Champicons?Icon?19.ico
?????文件????????450??2008-04-22?21:24??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\Chat.class
?????文件????????659??2008-04-22?21:24??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\Chat.java
?????文件????????403??2008-04-22?21:24??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\ChatClient.class
?????文件????????421??2008-04-22?21:24??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\ChatClient.java
?????文件????????697??2008-04-28?20:49??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\ChatRoom$1.class
?????文件????????660??2008-04-28?20:49??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\ChatRoom$2.class
?????文件????????660??2008-04-28?20:49??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\ChatRoom$3.class
?????文件????????660??2008-04-28?20:49??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\ChatRoom$4.class
?????文件????????660??2008-04-28?20:49??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\ChatRoom$5.class
?????文件????????672??2008-04-28?20:49??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\ChatRoom$6.class
?????文件????????672??2008-04-28?20:49??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\ChatRoom$7.class
?????文件????????672??2008-04-28?20:49??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\ChatRoom$8.class
?????文件????????585??2008-04-28?20:49??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\ChatRoom$Windowclose.class
?????文件??????15995??2008-04-28?20:49??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\ChatRoom.class
?????文件??????20325??2008-04-28?20:49??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\ChatRoom.java
?????文件????????342??2008-04-22?21:24??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\chenmin_message.txt
?????文件?????????22??2008-04-22?21:24??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\client.bat
?????文件????????597??2008-04-22?21:24??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\Clock$1.class
?????文件???????5034??2008-04-22?21:24??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\Clock.class
?????文件???????1846??2008-04-22?21:24??Java聊天室程序畢業(yè)設(shè)計(jì)\Java聊天室程序Sql?Server2000數(shù)據(jù)版本\liaotian\CLOCK.ICO
............此處省略335個(gè)文件信息
評(píng)論
共有 條評(píng)論