java课程设计报告--聊天小程序…文档格式.docx
- 文档编号:13072351
- 上传时间:2022-10-04
- 格式:DOCX
- 页数:23
- 大小:196.35KB
java课程设计报告--聊天小程序…文档格式.docx
《java课程设计报告--聊天小程序…文档格式.docx》由会员分享,可在线阅读,更多相关《java课程设计报告--聊天小程序…文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
2、能实现一个聊天室中的多人聊天;
3、可以实现两个私聊;
四、设计说明书应附有下列图纸:
运行结果截图
五、小组分工说明:
六、命题发出日期:
2014.12.29 设计完成日期:
2015.1.14
指导教师评语
成绩:
指导教师(签章):
年 月 日
山东科技大学学生课程设计
目 录
1需求分析说明 1
1.1背景 1
1.2功能要求 1
1.3运行环境 1
1.4功能实现 1
2概要设计说明 2
2.1模块调用图 2
2.2套接字连接示意图 2
2.3主要函数声明 2
3详细设计说明 4
3.1功能描述 4
3.2主要功能详述 4
3.3主要代码分析 5
4调试分析 9
4.1遇到的问题 9
4.2测试结果分析 10
5用户使用说明 10
6课程设计总结 12
7附录 13
1.1背景
1 需求分析说明
19
在当今的信息时代,越来越多的聊天工具被应用,Java语言是当今流行的网络编程语言,它具有面向对象、与平台无关、安全、多线程等特点。
此课程设计的题目是聊天小程序,巩固所学的Java语言基本知识,增进Java语言编辑基本功,拓宽常用类库的应用。
使我们把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法。
1.2功能要求
1、使用图形用户界面。
2、能实现一个聊天室中多人聊天。
3、可以两人私聊。
1.3运行环境
本程序基于Java和Eclipse开发环境,可以在一般的装有Windows系统的主机上运行。
1.4功能实现
程序实现了聊天室的基本功能,其中有:
1、启动服务器。
2、进入客户端界面。
3、登录聊天室。
4、发送信息。
5、关闭服务器。
6、输入昵称。
7、发送消息并收到其他客户的消息。
2.1模块调用图
2概要设计说明
2.2套接字连接示意图
2.3主要函数声明
1、Socket的构造方法如下:
Socket(Stringhost,intport)
参数host是服务器的IP地址,port是一个端口号。
2、ServerSocket的构造方法如下:
ServerSocket(intport)
port是一个端口号。
port必须和客户呼叫的端口号相同
3、当建立时可能发生IOException异常,因此应像下面那样建立到服务器的套接字连接:
Try
{
Socketmyscoket=newSocket(“http:
//192.168.0.78”,1880);
}
Catch(IOExceptione){}
4、当建立服务器时可能发生IOException异常,因此,应像下面那样建立接收客户的服务器套接字:
ServerSocketserver_scoket=newServerSocket(1880);
}
比如1880端口已被占用时,就会发生IOException异常。
5、当服务器的ServerScoket对象server_socket建立后,就可以使用
accept()方法接收客户的套接字连接呼叫,代码如下:
Server_socket.accept();
6、客户使用Socket类不带参数的构造方法Socket()创建一个套接字对象,该
对象需调用
Publicvoidconnect(SocketAddressendpoint)throwsIOException
请求和参数SocketAddress指定地址的套接字建立连接,为了使用connect
方法,可以使用SocketAddress的子类InetSocketAddress建立一个对象,
InetSocketAddress的构造方法如下:
PublicInetSocketAddress(InetAddressaddr,intport)
3.1功能描述
3详细设计说明
聊天程序分为服务器端和客户端两部分,服务端程序主要负责侦听客户端发来的消息,客户端需要登陆到服务器端才可以实现正常的聊天功能。
服务器:
1、在特定端口上进行侦听,等待客户端连接。
2、向已经连接到服务器端的用户发送系统消息。
3、当停止服务时,断开所有的用户连接。
4、系统运行稳定、安全可靠。
客户端:
1、连接到已经开启聊天服务的服务器端。
2、当服务器端开启后,用户可以发表聊天信息。
3、用户可以向所有人发送消息。
3.2主要功能详述
3.2.1客户建立连接到服务器的套接字对象
1、当套接字连接mysocket建立后,可以想象一条通信“线路”已经建立起来。
mysocket可以使用getInputStream()方法获得一个输入流,然后用这个输入流读取服务器放入“线路”的信息。
mysocket还可以使用getOutputStream()方法获得一个输出流,然后用这个输出流将信息写入“线路”。
2、在实际编写程序时,把mysocket使用getInputStream()方法获得的输入流接到另一个数据流上,然后就可以从这个数据流读取服务器来的信息,之所以这样是因为后面DataInputStream流有更好的从流中读取信息的方法。
3、同样把mysocket使用getOutputStream()方法得到的输出流接到另一个
DataOutputStream数据流上,然后向这个数据流写入信息,发送给服务器端,之所以这样做也是因为后面的DataOutputStream流有更好的向流中写入信息的方法。
3.2.2ServerSocket类
1、客户负责建立客户到服务器的套接字连接,即客户负责呼叫。
因此服务器必须建立一个等待接收客户的套接字的ServerSocket对象。
ServerSocket的构造方法如下:
ServerSocket(intport)
2、所谓接收客户的套接字连接就是accept()方法会返回一个和客户端Socket
对象相连接的Socket对象,服务器端的这个Socket对象sc使用
getOutputStream()方法获得的输出流将指向客户端Socket对象myscoket使用
getInputStream()方法获得的那个输入流;
同样,服务器端的这个Socket对象
sc使用使用的 getInputStream()方法获得的输入流将指向客户端Socket对象myscoket使用getOutputStream()方法获得的那个输出流。
3、连接建立以后,服务器端的套接字对象调用getInetAddress()方法可以获取一个InetAddress对象,该对象含有客户端的IP地址和域名。
同样,客户端的套接字对象调用getInetAddress()方法可以获取一个InetAddress对象,该对象含有服务器端的IP地址和域名。
双方通信完毕后,应使用close()方法关闭套接字连接。
3.2.3把套接字连接放在一个线程里
需要注意的是,从套接字连接中读取数据与从文件中读取数据有很大的不同。
尽管两者都是输入流,但从文件中读取数据时,所有的数据都已经在文件上了,而使用套接字连接时,可能在另一端数据发送出来之前,就已经开始试着读取了,这时,就会堵塞本线程,直到该读取方法成功读取信息,本线程才继续执行后续的操作。
因此,服务器端收到一个客户的套接字后,就应该启动专门为该客户服务的线程。
3.3主要代码分析
3.3.1使用套接字实现的主要方法
服务器为每个客户启动一个线程,在该线程中通过套接字和客户交流信息。
当向服务器发送一条聊天信息时,服务器要让所有的这些线程中的输出流写入信息,这样所有的客户的套接字的输入流就读取到了这一条信息。
如果想把信息送给特定的用户,服务器就让特定的线程中的输出流写入信息,那么只有特定的客户的套接字的输入流可以读取到这条信息。
3.3.2客户端
publicvoidactionPerformed(ActionEvente)
{if(e.getSource()==connection)//连接服务器
{ try
{if(socket.isConnected())
{}
else
{InetAddress
address=InetAddress.getByName("
127.0.0.1"
);
//传递域名InetSocketAddresssocketAddress=new
InetSocketAddress(address,666);
socket.connect(socketAddress);
in=newDataInputStream(socket.getInputStream());
out=new
DataOutputStream(socket.getOutputStream());
name=inputName.getText();
out.writeUTF("
姓名:
"
+name);
send.setEnabled(true);
if(!
(thread.isAlive()))
thread=newThread(this);
thread.start();
//启动线程,新建状态到就绪队列排队
catch(IOExceptionee){}
if(e.getSource()==send)//发送内容
{ Strings=inputContent.getText();
if(s!
=null)
{ try{out.writeUTF("
聊天内容:
+name+"
:
+s);
catch(IOExceptione1){}
publicvoidrun()//线程对象调度之后所执行的操作
{ Strings=null;
while(true)
{ try{ s=in.readUTF();
//读取服务器发来的消息,堵塞状态
chatResult.append
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 课程设计 报告 聊天 程序