网络课程设计报告docWord文档下载推荐.docx
《网络课程设计报告docWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《网络课程设计报告docWord文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
1.有一个聊天服务器,存储帐户信息;
2.用户向服务器发送含有账户名的消息,服务器接受连接后,将账户名及其IP、端口记录下来,并刷新用户的账户列表;
3.服务器监控聊天内容;
4.支持多人聊天,聊天时列出当前所有在线的人员;
5.客户端之间可以单独发送消息;
6.支持图片表情;
7.保存用户聊天信息;
(2)设计思想
Java是一种简单的,面向对象的,分布式的,解释的,键壮的,安全的,结构中立的,可移植的,性能很优异的,多线程的,动态的语言。
Java的语言功能很精炼,并增加了一些很有用的功能,如自动收集碎片。
而且,Java很小,不需要占用多大内存。
因此运用JAVA程序编写聊天室,实现简单聊天功能。
本次课程设计做的是Java简单聊天室,它是图形界面、线程、流与文件等技术的综合应用。
在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。
因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。
服务器端工作流程:
服务器端通过系统调用创建一个ServerSocket与指定的本地端口绑定,就可以在端口进行侦听。
如果有客户端连接请求,则创建一个Socket,将客户端地址赋给这个Socket。
然后登录成功的客户就可以在服务器上聊天了。
客户端工作流程:
客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据就可以了。
Socket程序的工作过程:
1.建立Socket连接:
在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接道。
2.数据通信:
利用虚拟连接通道传送数据信息进行通信。
3.关闭:
通信结束时,再将所建的虚拟连接拆除。
二.功能实现和系统结构
系统功能如下:
服务器:
端口设置:
设置倾听的端口号,默认为8888。
启动服务:
开启倾听端口,允许客户端连接。
系统消息:
服务器启动后可以在聊天室内发送消息。
停止服务:
关闭倾听端口,中断所有客户端的连接。
退出:
关闭服务器。
在特定端口上进行侦听,等待客户端连接。
用户可以配置服务器端的侦听端口,默认端口为8888。
向已经连接到服务器端的用户发送系统消息。
统计在线人数。
当停止服务时,断开所有的用户连接。
系统运行稳定、安全可靠。
一台主机只能启动一个服务器。
客户端:
用户设置:
设置聊天时显示的名称,默认为匆匆过客。
连接设置:
设置要连接的服务器所在主机的IP地址和倾听端口。
登录:
连接服务器。
发送消息:
进行聊天,可单独发送消息给聊天室中的一个人。
注销:
与服务器断开连接。
关闭客户端。
连接到已经开启聊天服务的服务器端。
用户可以配置要连接的服务器端的IP地址和端口号。
用户可以配置连接后显示的用户名。
用户可以更改聊天时的表情。
当服务器端开启后,用户可以随时登录和注销。
用户可以向所有人或某一个人发送消息。
可以默认连接到自己主机启动的服务器。
系统结构如图所示:
三、采用的主要技术、遇到的难点和解决方法
1.主要技术
(1)操作系统:
Windowsxp
(2)开发工具:
eclipse3.2及其VE插件
(3)开发工具:
Eclipse
(4)使用GUI界面设计
(5)JavaSwing技术
2.遇到的难点和解决
难点:
表情信息的传送
解决:
通过对发送消息进行解析,提取出表情图片的信息进行顺序输出。
四、核心代码描述和相关技术说明
4.1界面设计
本程序采用的是Javaswing图形界面开发工具包来设计的,建立一个主类Client.java,然后在其构造方法加载程序所需的组件,设置布局方式(采用的是Boxlayout布局管理器)。
构造方法如下:
privatevoidinit(){
box=Box.createVerticalBox();
//竖结构
Boxbox_1=Box.createHorizontalBox();
//横结构
Boxbox_2=Box.createHorizontalBox();
Boxbox_3=Box.createHorizontalBox();
box.add(box_1);
box.add(Box.createVerticalStrut(8));
//两行的间距
box.add(box_2);
box.add(box_3);
box.setBorder(BorderFactory.createEmptyBorder(8,8,8,8));
//8个的边距
//开始将所需组件加入容器
box_1.add(newJLabel("
字体:
"
));
//加入标签
box_1.add(fontName);
//加入组件
box_1.add(Box.createHorizontalStrut(8));
//间距
样式:
box_1.add(fontStyle);
字号:
box_1.add(fontSize);
颜色:
box_1.add(fontColor);
背景:
}
4.2重点功能模块
(1)启动和建立连接
/**
*启动服务端
*/
publicvoidstartService(){
try{
serverSocket=newServerSocket(port,10);
messageShow.setCaretPosition(messageShow.getText().length());
//获取消息框字符串长度
messageShow.replaceSelection("
服务端已经启动,在"
+port+"
端口侦听...\n"
);
//在末尾添加消息
startServer.setEnabled(false);
startItem.setEnabled(false);
portSet.setEnabled(false);
portItem.setEnabled(false);
stopServer.setEnabled(true);
stopItem.setEnabled(true);
MessagePane.setEnabled(true);
}
catch(Exceptione){
System.out.println(e);
userLinkList=newUserLinkList();
listenThread=newServerListen(serverSocket,combobox,messageShow,showStatus,userLinkList);
listenThread.start();
//服务端的侦听类启动
}
4.3客户端聊天模块
1.功能设计
(1)界面分为3部分:
中间部分显示所有聊天信息,最上边部分设置用户名、IP地址和端口号,底部用于文字和表情的输入与发送。
2.界面设计
图3聊天窗口
(1)从服务器获取聊天信息的线程,接受服务器发送信息的方法。
while(!
socket.isClosed()){
try{
Stringtype=(String)input.readObject();
if(type.equalsIgnoreCase("
系统信息"
)){
Stringsysmsg=(String)input.readObject();
String[]str=sysmsg.split("
%"
textarea.setCaretPosition(textarea.getDocument()
.getLength());
textarea.replaceSelection("
系统信息:
"
for(inti=0;
i<
str.length;
i++){
Filefile=newFile("
src/image/%"
+str[i]+"
%.gif"
if(file.exists()){
textarea.setCaretPosition(textarea.getDocument()
.getLength());
textarea.insertIcon(newImageIcon(getClass()
.getResource("
/image/%"
)));
}else{
textarea.replaceSelection(str[i]);
}
}
}
}catch(Exceptione){System.out.println(e);
}
4.调试与测试
测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施。
聊天室的设计是较为重要的部分,在先前简单的界面设计时较为简单,当通过在该类中添加实现对发送按钮监听时由于没有定义该类的方法连接使得发送按钮不能实现。
对这个小问题的检查较为简单。
4.4服务器端模块
中间显示所有聊天信息;
上边设置端口和IP地址,启动和停止服务器,还可以查看帮助;
底部用于发送系统信息和查看聊天记录和在线人数。
图4服务器窗口
3模块算法
(1)群发聊天信息
publicvoidsendToAll(Stringmsg,Stringname){
intcount=userLinkList.getCount();
inti=0;
while(i<
count){
Nodenode=userLinkList.findUser(i);
if(node==null){
i++;
continue;
node.output.writeObject("
聊天信息"
node.output.flush();
node.output.writeObject(name+"
群发:
+msg);
}catch(Exceptione){
//System.out.println(e);
i++;
服务器的是聊天系统中很重要的部分,这个界面设计较为简单,但在消息传送时出现了很多异常,主要是由于表情符号的文字混合是无法正确解析导致的。
特别是将字符流放字节流刘缓冲区当中是后由于吧new给忘记了,在结果的运行中,服务器总是接收不到客户端信息,这些问题占据了我大半天得时间才调试过来。
通过这一点我深刻体会到了细节决定成败。
五、总结和体会
对于本系统的实现,首先是构建一个聊天系统主要的框架,通过查找关于聊天系统的相关知识,建立一个聊天系统主要由服务器和客户端,用户的登录界面和注册界面,这是一个很简易的聊天系统。
然后通过类的建立登录窗口类FrmLogin客户端窗口类Frmain、注册界面窗口类FrmRegist、服务器类ChatSever;
由这些类运行出这几个主要的窗口类,在通过一个容器类RongQi来存储用户的信息,通过类Config读取相应的键对应信息。
实现简单的窗口界面的输出。
其次是通过在这些类当中添加事件处理,如用户名是否错误,密码是否在规定范围之内;
客户端与服务器之间的信息传输实现,实现对按钮的监听实现系统中群消息的发送。
最后,通过运行服务器和登录窗口,注册一个用户名实现用户与服务器的链接,就可进行在聊天室中聊天,实现聊天室功能。
体会:
在这个课程设计中让我体会到一个简单的聊天系统也不是那么好实现的,只是简单窗口的实现也要花费一天半时间,然后通过用户窗口之间添加对事件的处理监听器接口链接最终实现简单聊天系统。
本系统能实现在客户端用户聊天窗口中显示用户名昵称和头像,服务器端口能看见当前用户在线状态并显示用户名和昵称。
实现多个用户之间在线信息的发送;
服务器能监测当前用户所发信息。
是现简单的用户聊天功能。
本系统有很多不足之处,再对用户消息的发送当中只能是在一个窗口实现,就都是在一个聊天室里面,没有私聊的实现,用户上线后显示的头像不是用户当前头像,是按上线顺序进行排列的,很难区分客服端窗口中谁是当前用户,对于用户下线时也存在区分不清;
本人觉得在对用户信息的存储与应该建立一个数据库会更好。
我们小组花了四天的时间写完这个程序,经过了很多次的调试,终于达到了现在的效果。
原先认为不可能的事,我们发现,如果有不畏困难的信心和肯钻研的勇气,就一定会完成,甚至达到意想不到的效果。
并且加深了对Java的理解,自己的Java编程水平提高了很多。