局域网广播系统.docx
《局域网广播系统.docx》由会员分享,可在线阅读,更多相关《局域网广播系统.docx(11页珍藏版)》请在冰豆网上搜索。
![局域网广播系统.docx](https://file1.bdocx.com/fileroot1/2023-1/31/a896d8d7-e23a-4a18-924a-1172a675381e/a896d8d7-e23a-4a18-924a-1172a675381e1.gif)
局域网广播系统
XX学院计算机科学与技术系
实验报告
课程名称
程序设计基础实验
(2)
实验项目
应用系统的面向对象设计与分析
实验类型
综合性实验
完成人
所在班级
指导教师
完成日期
2009年11月29日
实验报告正文
一.实验报告简表
实验课题名称
局域网广播
综合性实验项目
应用系统的面向对象设计与分析
服务课程
程序设计基础实验
(2)
实验小组组长
指导教师
参与实验人员及其在实验课题中承担的主要任务(包括组长)
学号
小组成员姓名
班级
在实验课题中的主要作用
二.设计内容与要求
1、多点广播是一种新的技术,可以把信息发送给等待接受的接受者,利用Java的Socket通信技术,设计一个网络广播系统,可以随时发送服务器的内容。
2、客户端运行相应的客户端程序,连接服务器就可以接受到服务器的广播的信息,客户端可以随时开始或停止接受广播。
三.总体设计,包括需求分析、功能描述、设计工具与运行环境、类及类间关系描述等
TCP/UDP编程比较简单、功能强大,深受喜爱,基于TCP/UDP的通信在Internet网中广泛应用。
其特点:
TCP是面向连接的可靠的协议,适用于传输大批量的文件,检查是否正常传输;UDP是面向非连接的不可靠的协议,适用于传输一次性小批量的文件,不对传输数据报进行检查;TCP需要先建立连接才能通话;UDP不需要,实时性比较高。
“英语在线学习”利用“局域网广播”的原理,TCP的socket编程实现客户端和服务器的连接通信,其实现功能如下:
1、客户端:
可以实现服务器在线,客户端时时连接,连接的客户端就可以接受服务器发送的信息,客户端也可随时关闭其连接。
2、服务器端:
时时监控客户端的连接,可连接多个客户端,并显示连接的客户端的Ip地址。
输入要发送客户端的信息,比如“English英语”,点击“发送”按钮,连接的所有客户端都能接受同样的信息。
设计工具:
eclipse(Release3.5.1)和JDK6.0
运行环境:
WindowsXP
类及类间关系
服务器端:
Frame类
Thread类
ServerThread类
主类Server类
Server类包含main()函数,完成窗口的创建和显示,以及信息的发送ServerThread完成客户端的连接请求。
客户端:
Frame类
Thread类
FrameOut类
connectedMsg类
主类Client
Client是主类调用FrameOut完成窗口的创建、显示,connectedMsg是个子线程,负责连接服务器。
四.详细设计,包括类图及代码等
服务器端
Server类
Frame类
1、“Server”类继承“Frame”类,实现窗口的创建和显示,并监听各组件的动作,同时开启多线程,ServerThread类的线程。
监听“closebtn按钮”,退出系统,并释放所有的资源。
if(e.getSource().equals(closeButton))
{
dispose();
System.exit(0);//退出系统
}
2、监听“sendButton”按钮,“sendButton”按钮有动作发生时,取得文本框的内容。
有客户连接时,把信息发送给客户端,否则显示“没有客户”
if(e.getSource().equals(sendButton))//如果是发送按钮,执行下面
{
Stringmessage=sendMsg.getText();//获得要发送的信息
if(socketVe.size()==0)//判断socketVe是否为空
{
connectIP.setText("没有客户连接");//
}
else
{
for(intn=0;n{
Socketsocket=socketVe.get(n);
try{
DataOutputStreamsOut=newDataOutputStream(socket
.getOutputStream());//创建输出流
sOut.writeUTF(message);//发送消息
sOut.flush();
}catch(IOExceptione1){}//
}
}
}
因为在加入的客户端的个数无法确定,所以必须设计一个不定的Vector数组才最合适,既不会浪也不出现设计的太小而无法满足客户的连接
publicVectorsocketVe=newVector();//Socket的管理器
2、“ServerThread类”继承于Thread,在main()的中开启线程,时刻监听客户端的请求连接,加入自己的Verctor(Socket)中,以便发送。
Thread类
ServerThread类
publicvoidrun()
{
try{
serverSocket=newServerSocket(5600);//在5600端口监听客户端
}catch(IOExceptione1){
e1.printStackTrace();
}
while(true)
{
try{
Socketconnected=serverSocket.accept();//接受客户端的连接请求
server.socketVe.add(connected);//加入管理器
server.connectIP.append(connected.getInetAddress().toString()+"\n");
//在窗口中显示
}catch(IOExceptione){}//连接的异常抛出
}
}
因为Socket.accept();会是阻塞式的,如果想接受多个客户端的请求,单独的设计一个线程比较方便管理,而且不会阻塞进程而不影响其他组件的使用。
客户端
Frame类
1、“client类”是主类,创建“FrameOut类”,“FrameOut类”继承“Frame类”实现窗口的创建和显示。
Client类
FrameOut类
在创建窗口时,对各按钮的合理摆放不仅方便各种操作,而且更给人一个美的感觉。
所以,个组件的定位非常重要。
先定义一个空的布局方式,加入一个容器,把各组件加入容器中,组件这时具有一个setBounds()方法,可以方便的其在窗口中的位置。
如:
staticTextArearecivedMsg;
recivedMsg=newTextArea(10,30);//文本区域
recivedMsg.setBounds(50,50,350,320);//设置欢迎标签的大小和位置
panl.add(recivedMsg);
2、
五.实例运行及应用效果
1.服务器端界面,输入内容后点击发送即可向所有已经连接的客户端发送数据消息.
2.客户端界面,输入IP地址点击连接后即可与服务器端进行连接,连接完成后可以与服务器端进行消息交流.
3.连接界面
4.连接完成
5.发送消息
六.体会与总结,包括对所用知识点和关键方法的综合认识
本次实验的“英语在线学习系统”就是简单的Socket编程的应用。
实现多个客户端和服务器的连接通信,服务器等待客户端的连接,客户端则时时可以连接服务器接受其消息。
在实现过程中,用Java的application的编写良好的界面,更好的服务于使用者。
在界面的创建过程中用到了容器,标签,按钮,文本框和文本域等各组件。
本实验使用了空布局,在其中加入容器,可以方便的定位各个组件在窗口中的位置,使界面更加美观。
本次实验运用了TCP/DCP中的连接通信的TCP协议,Socket编程是实现通信的关键。
实现多个用户的连接时,使用了泛型编程,设置一个“管理器”,可以方便的把各个客户端的Socket加入其中,用其他方法实现就比较麻烦操作。
在设计多个客户连接服务器时由于socket在使用其方法是阻塞式的,则服务器要接受多个客户端的连接,必须是时时监听客户端的连接,则此时接到一个客户端的连接时会进入下一个等待客户端的连接,直到有客户的连接才会取消其阻塞状态。
如果不单独的分配一个线程的话就会出现影响其他线程的阻塞使其他功能无法实现。
所以,实验中多线程也是一个重要的内容。
还有,在客户端要求连接服务器时,要求输入服务器的IP地址,客户端服务程序会自动检验客户的输入是否IP格式的符合要求,这时有要用到JAVA的正则表达式。
总的来说,本次实验,锻炼了我们合理规划设计类的能力,application的界面编程的各个内容,以及网络TCP协议的socket编程,多线程,正则表达式和简单泛型等方面的JAVA编程。
正在开发中,经常的交流沟通,让我们体验了团队协作的编程。
最重要的是我们在开发中学会了使用课本的知识应用于实践,可以让我们有团队开发的经验和使用JAVA的能力都有了提高。
杨玉雪,张娟,朱海清,耿辉,颜彬彬
2009年12月1号