网络编程课程设计.docx
《网络编程课程设计.docx》由会员分享,可在线阅读,更多相关《网络编程课程设计.docx(16页珍藏版)》请在冰点文库上搜索。
![网络编程课程设计.docx](https://file1.bingdoc.com/fileroot1/2023-6/15/12aaadbc-9af5-436d-9409-cc67522799ba/12aaadbc-9af5-436d-9409-cc67522799ba1.gif)
网络编程课程设计
课程设计说明书
课程名称:
Windows网络编程
设计题目:
基于JAVA网络聊天室设计
学院:
计算机科学与信息工程学院
专业班级:
网络工程12级
指导教师:
小组成员:
2021年6月
网络聊天室
摘要:
随着我国经济开展和网络的普及,网络技术也越来越多地被应用于日常工作之中。
在程序设计领域,面向对象的编程技术正在逐步代替面向过程的程序设计技术,成为计算机应用设计开发的主流,对于人与人之间通过网络的沟通和交流,聊天室是人们最常见、最直接的交流的方式。
本聊天系统以聊天交流为主,为广阔用户提供一个借助网络进行人际交往的平台,也是网络与现实最贴近的实用型应用。
本文所介绍的网络聊天系统是基于JAVA应用程序开发设计的,其主要特性是简单、面向对象、分布式、解释执行、平安、体系结构中立、可移植、高性能、多线程以及动态性。
关键词:
局域网、聊天室、JAVA、Socket、WindowsSocket
引言:
目前,基于TCP/IP协议的网络得到了普及和飞速的开展,Windows下的网络程序越来越显得重要。
利用TCP/IP协议提供的编程接口———Socket(套接字)可以开发出TCP/IP应用程序。
正确的使用WindowsSocket,就可使得不同地址下的进程得以在Windows环境下顺利进行各种网络通信,因此研究WinSock更有意义。
而基于TCP/IP协议网络环境下的应用程序是通过客户机/效劳器(C/S)作用方式模式在网络(应用)编程界面实现的。
本次实验采用java语言设计一个基于C/S模式的TCP网络通讯程序。
实现客户端与效劳器端之间的数据传输。
根据当前网络的需求,网络聊天越来越受到各种网民所青睐。
因此开发网络聊天是相当有必要,而且在网站内增加聊天功能,它不仅可以提高网站的访问量,同时可以留着访客,更重要的是让访客透过聊天室实时的互相交流。
而小组成员也都学习过JAVA语言,对网络编程也较有兴趣,为了更好的考验自己对JAVA语言的掌握程度,小组成员一致决定以?
基于JAVA的网络聊天室?
为课程设计,希望通过这一次能进一步提高我们的网络开发编程的能力。
聊天系统不外乎两个方面,效劳器端和客户端。
这里简要分析一下两个方面所要完成的任务:
效劳器端的任务:
1、效劳器端应当建立一个ServerSocket,并且不断进行侦听是否有客户端连接或者断开连接。
2、效劳器端应当是一个信息发送中心,所有客户端的信息都传到效劳器端,由效劳器端根据要求分发信息。
客户端的任务:
1、与效劳器端建立通信通道,向效劳器端发送信息。
2、接收来自效劳器的信息。
2.系统开发技术
2.1JAVA网络编程技术
JAVA丰富的类库提供了大量的类以满足网络化、多线程、面向对象系统的需要。
语言包提供的支持包括字符串处理、多线程处理、数学函数处理等,可以用它简单地实现JAVA程序的运行平台。
实用程序包提供的支持包括哈希表、堆栈、可变数组、时间和日期等。
输入输出包用统一的"流"模型来实现所有格式的I/O,包括文件系统、网络、输入低级网络包用于实现Socket编程。
抽象图形用户接口包实现了不同平台的计算机的图形用户接口部件,包括窗口、菜单、滚动条、对话框等,使得JAVA可以移植到不同平台的机器。
网络包支持Internet的TCP/IP协议,提供了与Internet的接口。
它支持URL连接,WWW的即时访问,并且简化了用户/效劳器模型的程序设计。
2.2Socket套接字
Socket,简称套接字,用于实现网络上客户和效劳器之间的连接。
具体的说:
一个效劳器应用程序一般侦听一个特定的端口等待客户端的连接请求,当一个连接请求到达时,客户端和服武器端建立一个通信连接,在连接过程中,客户端被分配一个本地端口与一个Socket建立连接,客户端通过写Socket来通知效劳器,以读Socket中的信息,类似的效劳器也获得一个本地端口,它需要一个新的端口号来侦听原始端口上的其他连接请求。
效劳器也通过它的本地端口连接一个Socket,通过读写和客户端通信。
Socket程序的工作过程:
1.建立Socket连接:
在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接道。
2.数据通信:
利用虚拟连接通道传送数据信息进行通信。
3.关闭:
通信结束时,再将所建的虚拟连接撤除。
具体如下:
图1Socket套接字的建立与连接
2.3TCP三次握手
第一次握手:
原主机发送一个带有本次连接的序号的请求的一个数据帧
第二次握手:
目的主机收到请求后,如果同意连接,那么发回一个带有一个本次连接序号和源端机连接序列号确实认。
第三此握手:
源端机收到含有两次初始序列号的应答后,再向目的主机发送一个带有两次连接的序列号确实认。
3.系统总框图与功能分析
图2聊天系统框架图
图3系统功能图
客户端:
启动连接:
默认连接IP为127.0.0.1,端口为1228。
聊天:
用户可以给所有人发送信息,并能看到其他用户发送给自己或所有人的消息。
断开连接:
与效劳器断开连接,无法发送与接收信息。
效劳器端:
启动效劳:
绑定套接字,处于等待连接的状态,实时监控网络状态。
侦听客户端:
效劳器端套接字一旦监听到客户端套接字的连接请求,它就响应客户端套接字的请求,一旦客户端确认了此描述,连接就建立好了。
而效劳器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求
断开连接:
与客户端断开连接,无法侦听连接客户端。
4.系统模块代码设计与分析
客户端:
1.用效劳器的IP地址和端口号实例化Socket对象。
2.调用connect方法,连接到效劳器上。
3.将发送到效劳器的IO流填充到IO对象里,比方BufferedReader/PrintWriter。
4.利用Socket提供的getInputStream和getOutputStream方法,通过IO流对象,向效劳器发送数据流。
5.通讯完成后,关闭翻开的IO对象和Socket。
效劳器端:
1.在效劳器,用一个端口来实例化一个ServerSocket对象。
此时,效劳器就可以这个端口时刻监听从客户端发来的连接请求。
2.调用ServerSocket的accept方法,开始监听连接从端口上发来的连接请求。
3.利用accept方法返回的客户端的Socket对象,进行读写IO的操作。
4.通讯完成后,关闭翻开的流和Socket对象
1.ServerUI类:
效劳器端界面类,主要负责效劳器端的界面设计
2.Server类:
此类负责创立绑定到指定效劳器端口号的套接字,等待客户端连接
3.ListenerClient类:
此类负责侦听客户端发送信息并将信息播送出去
4.ClientUI类:
客户端界面类,主要负责客户端的界面设计
5.ClientThread类:
此类创立连接到效劳器端的套接字,读取输入内容并发送
客户端界面局部:
publicClientUI(){
super("客户端");//创立ClientUI类的对象
btStart=newJButton("启动连接");//启动连接按钮
btSend=newJButton("发送信息");//发送信息按钮
tfSend=newJTextField(10);//构造一个列数为10的空TextField
tfIP=newJTextField(10);
tfPost=newJTextField(5);
taShow=newJTextArea();//创立一个空的文本区域
/*创立“启动连接〞按钮的监听器对象,监听按钮发生的动作;
*如果“启动连接〞按钮被按下,那么将创立的ClientUI的对象作为参数传递给ClientThread类
**/
btStart.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){//构造匿名内部类来实现接口ActionListener
server=newClientThread(ClientUI.this);
}
});
/*创立“发送信息〞按钮的监听器对象,监听按钮发生的动作;
*如果“发送信息〞按钮被按下,那么将获取用户输入到文本框内的内容
**/
btSend.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
server.sendMsg(tfSend.getText());
tfSend.setText("");//设置文本框默认内容为空字符串
}
});
/*创立窗口监听器,监听窗口的动作
*如果窗口被关闭,那么会弹出〞确定关闭吗"的温馨提示窗口,以便用户选择
*如果用户选择“是〞,那么关闭窗口
**/
this.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
inta=JOptionPane.showConfirmDialog(null,"确定关闭吗?
","温馨提示",
JOptionPane.YES_NO_OPTION);
if(a==1){
System.exit(0);//关闭
}
}
});
客户端连接局部:
publicClientThread(ClientUIui){//ClientThread类构造函数,接收客户端的界面对象
this.ui=ui;
try{
client=newSocket("127.0.0.1",1228);//这里设置连接效劳器端的IP的端口
println("连接效劳器成功:
端口1228");
reader=newBufferedReader(newInputStreamReader(
client.getInputStream()));//构造客户端输入流并将字节转换为字符
writer=newPrintWriter(client.getOutputStream(),true);
//如果为true,那么println、printf或format方法将刷新输出缓冲区
}catch(IOExceptione){
println("连接效劳器失败:
端口1228");
println(e.toString());
e.printStackTrace();
}
this.start();//启动客户端线程
}
4.4效劳器端模块局部代码:
效劳器端启动局部:
publicvoidrun(){//线程开启后,执行以下操作
try{
ss=newServerSocket(1228);//创立绑定到端口号为1228的效劳器套接字对象
ui.clients=newArrayList();//构造一个包含指定端口号的连接客户端的列表,启动效劳器
println("启动效劳器成功:
端口1228");
while(true){//如果效劳器启动成功,执行以下操作
println("等待客户端");
Socketclient=ss.accept();//创立套接字对象,侦听并接受到此套接字的连接,在连接传入之前一直阻塞
ui.clients.add(client);//如果与客户端套接字连接成功,那么将此客户端套接字添加到列表中
println("连接成功"+client.toString());//将客户端套接字转换为字符串输出
newListenerClient(ui,client);//创立效劳器端与客户端的监听器
}
}catch(IOExceptione){//如果效劳器启动失败,输出相应信息
println("启动效劳器失败:
端口1228");
println(e.toString());
e.printStackTrace();
}
}
效劳器端侦听局部:
publicvoidrun(){
Stringmsg="";
while(true){
try{
reader=newBufferedReader(newInputStreamReader(
client.getInputStream()));
writer=newPrintWriter(client.getOutputStream(),true);
msg=reader.readLine();
sendMsg(msg);
}catch(IOExceptione){
println(e.toString());
//e.printStackTrace();
break;
}
if(msg!
=null&&msg.trim()!
=""){
println(">>"+msg);
}
}
}
//把信息播送到所有用户
publicsynchronizedvoidsendMsg(Stringmsg){
try{
for(inti=0;iSocketclient=ui.clients.get(i);
writer=newPrintWriter(client.getOutputStream(),true);
//如果为true,那么println、printf或format方法将刷新输出缓冲区
writer.println(msg);
}
}catch(Exceptione){
println(e.toString());
}
}
1.运行效劳器端,如下图
2.运行客户端,如下图
3.效劳器启动效劳,如下图
4.客户端启动连接,如下图
5.客户端与效劳器端会话,如下图
6.控制台显示,如下图
6.总结
通过本次课程设计对基于JAVA网络聊天室的设计,确实积累和总结了不少的经验,锻炼了我的独立工作和实际动手能力,加深了对计算机网络中socket工作原理及其相互联系的认识,提高了对复杂的综合性实践环节具有分析问题、解决问题、概括总结的实际工作能力,对网络编程工程的开发、设计过程有初步认识。
参考文献:
[1]李凌.WinSock2网络编程实用教程[M].北京:
清华大学出版社,2005.
.北京:
清华大学出版社,2021.
[3]盛华,?
Java网络编程实用精解?
;机械工业出版社,2021.
[4]朱振元,朱承,刘聆,?
Java语言及其网络应用?
;人民邮电出版社,2006.
[5]刘永华,于春华,?
实用Java网络编程技术?
;中国电力出版社,2021.
[6]李绪成,?
JavaEE5实用教程——基于WebLogic和Eclipse?
;电子工业出版社,2007.
本文档局部内容来源于网络,如有内容侵权请告知删除,感谢您的配合!