- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
综合性实验_2:文件上传器
实验类型:综合性实验
实验学时:4学时
涉及的知识点:Swing的界面设计、事件处理、Scoket编程、输入输出流、Swing线程等
1、实验目的
综合应用Swing的界面设计、事件处理、Scoket编程、输入输出流、Swing线程等知识,实现一个客户端向服务器传送文件的程序。
(1)掌握Swing的界面设计、事件处理的基本概念和基础知识,注意比较与AWT的异同点;
(2)掌握输入输出流的操作,能够读取文件内容、带缓冲的流操作;
(3)掌握Socket编程的基本概念和基础知识,理解服务器、客户端输入输出流的对应关系;
(4)熟悉Swing线程的操作要点,初步掌握SwingWorker类的基本用法和操作“进度条”的知识。
2、实验内容
应用Swing的界面设计、事件处理、Scoket编程、输入输出、Swing线程等知识,实现一个客户端向服务器传送文件的程序,相关功能说明如下:
服务器端:
点击右下角的“启动”按钮,做好接收文件的准备;之后,该按钮显示为“关闭”,点击后可退出程序;
上方有一“进度条”,能动态显示一个文件传送的比例;
文件传输信息可在中间的文本消息区显示,点击底部的“清除”按钮,可清除文本区内容;
点击窗口右上角的“X”可关闭程序;
服务器处于接收状态时,可接收多个文件。
客户端:
上方有服务器IP、服务器端口输入框,端口号默认为9999;
传送文件可通过文件选择框进行选择,显示风格为Windows观感;
点击右下角的“发送文件”按钮,可向服务器发送文件;
上方 “进度条”,能动态显示一个文件传送的比例;
当文件传送完毕,还会弹出一个消息框,以提示用户;
文件传输信息可在中间的文本消息区显示,点击底部的“清除”按钮,可清除文本区内容;
点击窗口右上角的“X”可关闭程序;
客户端可操作多次,向服务器传送多个文件。
3、实验器材设备
安装了Windows XP(或其他版本的Windows操作系统)和Eclipse 3.x(或以上版本的版本)的PC机一台。
4.实验要求
由于Swing使用单线程机制来处理界面绘制和事件处理,如果在Swing中执行耗时的业务逻辑(如:数据库查询、文件操作等),会导致界面操作阻塞。解决方法是把耗时的业务逻辑放到另一线程中执行,通常是放入到SwingWorker的继承类中,保证UI界面在EDT中执行,快速反应。
服务器端由两个文件组成:
FileReceiveServerr类:实现界面设计,包括点击按钮实现事件处理,端口设定为9999。为了能够动态显示“进度条”,需要设置PropertyChangeListener监听器,以便根据progress值变化,进度条显示不同值;
FileReceiveTask类:继承SwingWorker类,把文件接收等耗时操作放在其doInBackground()方法中,首先从建立的TCP流中得到传送文件名与文件大小,然后开始接收文件内容字节并写入创建的文件对象流中,当传送字节数发生变化时,修改属性progress的值,再验证文件大小与写入的字节流是否相等,最后发送一条消息Done到文件发送方,告诉对方文件传输完成,可以关闭TCP流。
客户端与服务器类似,也由两个文件组成,不同之处是应指定服务器IP和端口号,向服务器发送文件信息和内容:
FileTransferClient类:实现界面设计,包括点击“选择文件”、“发送文件”按钮实现事件处理,实现到服务端的连接等,创建FileTransferTask线程,并开始执行文件传送为了能够动态显示“进度条”,需要设置PropertyChangeListener监听器,以便根据progress值变化,进度条显示不同值;
FileTransferTask类:继承SwingWorker类,把文件接收等耗时操作放在其doInBackground()方法中,首先建立Socket与服务器进行连接,再向服务器传送文件名与长度,然后读取文件内容字节,写入Socket字节流中,发送到接受方,当传送字节数发生变化时,修改属性progress的值。之后从Socket字节流中读取服务器接收完毕信息,弹出文件传输成功信息。,
5、实验步骤
(1)新建一个项目:File/New.../Java项目,创建一个Java类;
(2)将下列代码复制到Java程序中。先阅读服务器端代码,再根据要求,填写客户端所缺的代码行、代码段:
服务器端代码:
//服务器端:FileReceiveServerr类,功能:首先是在端口9999创建一个服务器套接字并开始监听连接
//说明:由于Swing使用单线程机制来处理界面绘制和事件处理,如果在Swing中执行耗时的业务逻辑(如:数据库查询、文件操作等)
文档评论(0)