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