Java网络通信实现基于CS模式的聊天室.docx
- 文档编号:10404791
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:23
- 大小:130.60KB
Java网络通信实现基于CS模式的聊天室.docx
《Java网络通信实现基于CS模式的聊天室.docx》由会员分享,可在线阅读,更多相关《Java网络通信实现基于CS模式的聊天室.docx(23页珍藏版)》请在冰豆网上搜索。
Java网络通信实现基于CS模式的聊天室
学号
200710165114
武汉科技大学城市学院
课程设计报告
课程设计名称Java课程设计
题目
采用Java网络通信技术实现基于C/S模
式的聊天室
院系
信息工程学部
专业
信息管理与信息系统
班级
1班
姓名
张峰
指导教师
于海平
2018
年
01
月
07
日
编号:
036
题目:
采用Java网络通信技术实现基于C/S模式的聊天室
1课程设计教案条件要求eclipse/netbeans/Jbuilder
2课程设计任务
编写一个简易CS版聊天室,多个客户端可以同时发送信息,服务器端监听并显示到客户端页面。
1.要求可以实现多人同时在线聊天。
2.要求客户端和服务器端的界面采用Swing或SWT实现
3.服务器可以向多个客户进行广播通信。
3课程设计报告书主要内容
1需求分析
2总体设计
2.1设计的总体思想与算法描述
2.2模块结构图
2.3各功能模块的功能与处理流程描述
2.4界面设计
3各功能模块程序设计
按照功能模块的功能与处理流程描述给出详细的程序代码,并给出重点语句的注释.
4小结
4课程设计要求
1按时到机房签到,在指定机位上机。
遵守机房纪律。
2独立完成课程设计任务。
指导教师到机位上指导学生和分时段验收学生完成的程序。
3按时提交打印的课程设计报告书。
5课程设计参考书
[1]许文宪懂子建.Java程序设计教程与实训.北京:
北京大学出版社,2005.
[2]辛运帏.Java程序设计.北京:
清华大学出版社,2004
[3][美]Echel,B.Java编程思想<第三版).北京:
机械工业出版社,2005
撰写者:
江伟指导老师:
于海平
1需求分析1
2总体设计2
2.1设计的总体思想与算法描述2
2.2模块结构图2
2.3界面设计3
2.3.1管理员界面3
2.3.2登陆界面3
2.3.3聊天界面4
2.3.4文件发送界面5
2.3.5接受提示界面5
2.3.6选择保存界面6
2.3.7传输成功提示界面6
3程序设计7
4小结22
参考文献23
1需求分析
本系统是实现c/s模式的聊天室首先要建立侦听服务,这个需求是服务器端的需求。
其次还应实现:
用户登录,包括客户端请求登录以及服务器端响应登录两个过程。
收发聊天信息,包括客户端发送聊天信息以及服务器端转发聊天信息两个过程。
收发系统信息,由服务器端发送给客户端的信息。
用户下线,包括客户端请求下线以及服务器响应请求两个过程,这个与用户登录类似,服务器关闭。
其中我还加入了文件传输功能,方便了用户文件的共享。
b5E2RGbCAP
2总体设计
2.1设计的总体思想与算法描述
依据需求分析的结果,该系统应设计成一个可以实现多人同时在线聊天功能的聊天软件,下面从软件的整体结构设计、界面设计、变量设计等方面阐述一下系统的总体设计。
依据需求分析结果,设计应实现多人同时在线聊天,就应该分为服务端和用户端两个端口。
用户端把信息发送到服务端,而后服务端再把信息分发到各个用户端。
p1EanqFDPw
2.2模块结构图
图2.1模块结构图
2.3界面设计
2.3.1管理员界面
图2.2管理员界面
2.3.2登陆界面
图2.3登陆界面
2.3.3聊天界面
图2.4聊天界面
2.3.4文件发送界面
图2.5文件发送界面
2.3.5接受提示界面
图2.6接受提示界面
2.3.6选择保存界面
图2.7选择保存界面
2.3.7传输成功提示界面
图2.8传输成功提示界面
3程序设计
packagecom.ff。
importjava.io.*。
import.*。
importjava.util.*。
importjavax.swing.*。
importjava.awt.*。
importjava.awt.event.*。
publicclassStartServer{
publicstaticvoidmain(String[]args>{
StartServerstartServer=newStartServer(>。
StartServer.ServerserverFrame=startServer.newServer(>。
DXDiTa9E3d
}
classServerextendsJFrame{
privateJScrollPanejp_rec。
privateJScrollPanejp_send。
privateJScrollPanejp_list。
privateJTextAreajta_rec。
privateJTextAreajta_send。
privateJLabellbl_rec。
privateJLabellbl_edit。
privateJListjlist。
privateJButtonbtnSend。
//发送消息按钮
privateJButtonbtnT。
privateDefaultListModellistModel。
privateHashMap
RTCrpUDGiT
publicServer(>{
init(>。
try{
ServerSocketserver_socket=newServerSocket(9999>。
5PCzVD7HxA
while(true>{
Socketclient_socket=server_socket.accept(>。
SocketThreaddealThread=newSocketThread(
client_socket>。
newThread(dealThread>.start(>。
}
}catch(Exceptionex>{
ex.printStackTrace(>。
}
}
publicvoidinit(>{
this.setTitle("管理员平台">。
this.setSize(800,400>。
this.setDefaultCloseOperation(EXIT_ON_CLOSE>。
this.setLocationRelativeTo(this>。
Containerc=this.getContentPane(>。
c.setLayout(null>。
jta_rec=newJTextArea("">。
jta_send=newJTextArea("">。
jp_rec=newJScrollPane(>。
jp_send=newJScrollPane(>。
jp_list=newJScrollPane(>。
lbl_rec=newJLabel("--消息记录--">。
lbl_edit=newJLabel("--文本编辑--">。
btnSend=newJButton("发送">。
btnT=newJButton("T除成员">。
listModel=newDefaultListModel(>。
jlist=newJList(listModel>。
jlist.setBorder(BorderFactory.createTitledBorder("在线成员">>。
jLBHrnAILg
jp_rec.getViewport(>.add(jta_rec>。
jp_send.getViewport(>.add(jta_send>。
jp_list.getViewport(>.add(jlist>。
jta_rec.setLineWrap(true>。
jta_send.setLineWrap(true>。
jta_rec.setEditable(false>。
lbl_rec.setBounds(30,10,80,20>。
jp_rec.setBounds(30,30,450,100>。
lbl_edit.setBounds(30,130,80,20>。
jp_send.setBounds(30,150,450,100>。
btnSend.setBounds(350,260,80,20>。
jp_list.setBounds(500,30,120,220>。
btnT.setBounds(520,260,80,20>。
c.add(lbl_rec>。
c.add(lbl_edit>。
c.add(jp_rec>。
c.add(jp_send>。
c.add(btnSend>。
c.add(jp_list>。
c.add(btnT>。
this.setVisible(true>。
}
classSocketThreadextendsBaseTrans{
privatebooleanthreadON=true。
publicSocketThread(Socketclient_socket>{
super(client_socket>。
btnSend.addActionListener(newActionListener(>{
publicvoidactionPerformed(ActionEvente>{
messageEvent("code=001。
msg=※※※※※※公告"+newDate(>.toLocaleString(>+"※※※※※※※\r\n"+jta_send.getText(>>。
xHAQX74J0X
jta_send.setText("">。
}
}>。
btnT.addActionListener(newActionListener(>{
publicvoidactionPerformed(ActionEvente>{
if(jlist.getSelectedValue(>!
=null>{
SocketThreadst=allUserLink.get(jlist.getSelectedValue(>.toString(>.trim(>>。
LDAYtRyKfE
allUserLink.remove(jlist.getSelectedValue(>.toString(>.trim(>>。
Zzz6ZB2Ltk
st.sendMessage("code=0">。
messageEvent("code=001。
msg=※※※※※※公告"+newDate(>.toLocaleString(>+"※※※※※※※\r\n"+jlist.getSelectedValue(>+"被管理员踢了出去!
">。
dvzfvkwMI1
st.closeLink(>。
threadON=false。
listModel.remove(jlist.getSelectedIndex(>>。
}
}
}>。
}
publicvoidmessageEvent(Stringmsg>{
StringUtilstringUtil=newStringUtil(>。
stringUtil.AnalysisMessage(msg>。
Stringcode=stringUtil.getValueByKey("code">。
if(code.equalsIgnoreCase("000">>{
System.out.println("进入了001">。
listModel.addElement(stringUtil.getValueByKey("userName">>。
rqyn14ZNXI
for(Iterator
it.hasNext(>。
>{EmxvxOtOco
allUserLink.get(it.next(>>.sendMessage("code=001。
msg=※※※※※※公告"+newDate(>.toLocaleString(>+"※※※※※※※\r\n"+stringUtil.getValueByKey("userName">+SixE2yXPq5
"进入了聊天室,大家欢迎他(她>吧!
">。
}
allUserLink.put(stringUtil.getValueByKey("userName">,this>。
6ewMyirQFL
jta_rec.setText(jta_rec.getText(>+"\r\n"+"※※※※※※公告"+newDate(>.toLocaleString(>+"※※※※※※※\r\n"+stringUtil.getValueByKey("userName">+"进入了聊天室,大家欢迎他(她>吧!
">。
kavU42VRUs
jta_rec.setCaretPosition(jta_rec.getText(>.length(>>。
}y6v3ALoS89
elseif(code.equalsIgnoreCase("001">>{
System.out.println("进入了001">。
for(Iterator
it.hasNext(>。
>{M2ub6vSTnP
allUserLink.get(it.next(>>.sendMessage(msg>。
}
jta_rec.setText(jta_rec.getText(>+"\r\n"+stringUtil.getValueByKey("msg">>。
0YujCfmUCw
jta_rec.setCaretPosition(jta_rec.getText(>.length(>>。
eUts8ZQVRd
}
elseif(code.equalsIgnoreCase("010">>{
System.out.println("进入了010">。
this.setFileName(stringUtil.getValueByKey("fileName">>。
sQsAEJkW5T
this.setFileLength(Integer.parseInt(stringUtil
.getValueByKey("fileSize">>>。
initFileOutputStream("./">。
sendMessage("code=011">。
}elseif(code.equalsIgnoreCase("012">>{
System.out.println("进入了012">。
sendMessage("code=013">。
setSendFileFlag(true>。
}elseif(code.equalsIgnoreCase("014">>{
System.out.println("进入了014">。
for(Iterator
it.hasNext(>。
>{GMsIasNXkA
if(this!
=allUserLink.get(it.next(>>>{
SocketThreadst=allUserLink.get(it.next(>>。
st.setFileName(getFileName(>>。
st.setFileLength(getFileLength(>>。
st.sendMessage(
"code=015。
username="
+stringUtil
.getValueByKey("username">
+"。
fileName="
+getFileName(>
+"。
fileSize="
+getFileLength(>>。
}}
}elseif(code.equalsIgnoreCase("016">>{
System.out.println("进入了016">。
sendFileData("./"+this.getFileName(>>。
sendMessage("code=018">。
}elseif(code.equalsIgnoreCase("017">>{
for(Iterator
it.hasNext(>。
>{TIrRGchYzg
if(this!
=allUserLink.get(it.next(>>>{
allUserLink.get(it.next(>>.initNet(>。
}}}}
publicvoidrun(>{
while(threadON>{
receive(>。
}}}}
客户端代码
packagecom.ff。
importjava.io.*。
import.*。
importjava.util.Date。
importjava.awt.*。
importjava.awt.event.*。
importjavax.swing.*。
publicclassStartClient{
publicstaticvoidmain(String[]args>{
StartClientsc=newStartClient(>。
StartClient.Clientclient=sc.newClient(>。
}
classClient{
publicClient(>{
init(>。
}
publicvoidinit(>{
try{
Socketclient_socket=newSocket(InetAddress.getLocalHost(>,9999>。
7EqZcWLZNX
newThread(newChatPanel(client_socket>>.start(>。
}
catch(Exceptionex>{
ex.printStackTrace(>。
}}
classChatPanelextendsBaseTrans{
privateStringuserName。
privateJFramejThis。
privateJLabellbl_rec。
privateJLabellbl_edit。
privateJTextAreajta_rec。
//接收消息框
privateJTextAreajta_send。
//发送消息框
privateJTextFieldjtxt_file。
privateJScrollPanejp_rec。
privateJScrollPanejp_send。
privateJButtonbtnSelFile。
//选择文件
privateJButtonbtnSend。
//发送消息按钮
privateJFileChooserjfc。
//文件选择器
publicChatPanel(Socketclient_socket>{
super(client_socket>。
userName=JOptionPane.showInputDialog("请输入用户名:
">。
init(>。
}
publicvoidinit(>{
jThis=newJFrame(>。
jThis.setTitle("你好:
"+userName+"欢迎进入聊天程序">。
jThis.setSize(600,400>。
jThis.setDefaultCloseOperation(jThis.EXIT_ON_CLOSE>。
lzq7IGf02E
jThis.setLocationRelativeTo(jThis>。
Containerc=jThis.getContentPane(>。
c.setLayout(null>。
lbl_rec=newJLabel("--消息记录--">。
lbl_edit=newJLabel("--文本编辑--">。
jtxt_file=newJTextField("">。
jta_rec=newJTextArea("">。
jta_send=newJTextArea("">。
jp_rec=newJScrollPane(>。
jp_send=newJScrollPane(>。
btnSelFile=newJButton("文件....">。
btnSend=newJButton("发送">。
jfc=newJFileChooser(>。
jp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 网络 通信 实现 基于 CS 模式 聊天室