P2P文件共享程序面向对象综合设计报告.docx
- 文档编号:5064122
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:11
- 大小:129.78KB
P2P文件共享程序面向对象综合设计报告.docx
《P2P文件共享程序面向对象综合设计报告.docx》由会员分享,可在线阅读,更多相关《P2P文件共享程序面向对象综合设计报告.docx(11页珍藏版)》请在冰豆网上搜索。
P2P文件共享程序面向对象综合设计报告
合肥学院
计算机科学与技术系
课程设计报告
2012~2013学年第一学期
课程
JAVA语言
课程设计名称
P2P文件共享程序
学生姓名
学号
1104014002
专业班级
11计算机科学与技术4班
指导教师
张贯虹、胡春玲
2013年1月
一.设计题目及具体要求
编写一个可以进行点对点的文件共享程序,能够进行网络上的文件共享和传输。
该程序软件可以在任何一个标准配置的主机上运行,运行该程序的主机既是客户端,也是服务器端,是一个多线程程序。
作为服务器端,运行一个服务器线程始终监听指定的端口,如果网络上有其他主机要求建立连接,互相交换共享文件信息,双方就可以互相下载对方共享的文件。
二.总体设计思路
本程序仅有一个P2P.java的源码文件。
该文件中共有有四个类:
P2P、suface、receive、send。
其中P2P为主类,程序启动后,由P2P中主函数publicstaticvoidmain(Stringargs[])实例化一个surface对象。
Surface继承自frame类,并实现ActionListener接口,由它实现窗口界面与事件响应,并与用户交互。
Surface根据用户作出的具体操作选择(接收或分享)启动一个receive或send线程,由最终由receive线程对象完成接收操作,由send线程对象完成分享操作。
三.具体设计
全局流程图:
本程序涉及成员变量与方法
名称
种类
功能
从属
sur
surface类对象
用户交互
P2P
main
主方法
程序执行入口
P2P
gb
GridBagConstraints类对象
自定义界面网格布局
surface
gbl
GridBagLayout类对象
网格布局
surface
b1\b2\b3\b4
Button类对象
界面按钮
surface
l1\linfo\sinfo
Label对象
标签,显示信息
surface
tf
TextField类对象
文本框,输入对方IP地址
surface
sfile\lfile
string类对象
文件名,存储文件位置
surface
load\save
filedialog类对象
打开\保存文件对话框
surface
iss;
布尔值
记录用户选择分享\接收
surface
surface()
surface类构造方法
——
surface
actionPerformed()
ActionListener接口中方法
实现事件响应并启动线程
surface
se\re
send\receive类线程对象
实现分享\接收功能
surface
s
socket类对象
发起连接
receive\send
file
file类对象
表示进行I\O操作的文件
receive\send
str
int值
方便数据I\O
receive\send
ra
InetAddress值
表示对方IP地址
receive\send
ss
ServerSocket类对象
监听端口,接收连接
receive\send
in
InputStream类对象
输入流
receive
fos
FileOutputStream类对象
文件输出流
receive
bos
BufferedOutputStream
缓冲流
receive
receive
receive构造方法
接收文件位置等参数
receive
out
OutputStream类对象
输出流
send
fis
FileInputStream类对象
文件输入流
send
bis
BufferedInputStream
缓冲流
send
send
send
send
send
用户交互模块:
publicvoidactionPerformed(ActionEvente){
if(e.getActionCommand()=="分享"){//用户选择分享
load=newFileDialog(this,"请选择需要分享的文件",FileDialog.LOAD);
load.show();//弹出文件对话框
lfile=load.getDirectory()+load.getFile();
iss=true;//记录“分享”选择
}
if(e.getActionCommand()=="接收"){//用户选择接收
save=newFileDialog(this,"请选择存放文件位置及文件名",FileDialog.SAVE);
save.show();//弹出文件对话框
sfile=save.getDirectory()+save.getFile();
iss=false;//记录“接收”选择
}
if(e.getActionCommand()=="本机接受连接"){
if(iss){//若用户事先选择“分享”
sendse=newsend(newFile(lfile));
se.start();//启动分享线程
l1.setText("开始分享");
}else{//若用户事先选择“接收”
l1.setText("开始接收");
receivere=newreceive(newFile(sfile));
re.start();//启动接收线程
}
}
if(e.getActionCommand()=="本机发起连接"){
if(iss){//若用户事先选择“分享”
sendse;
l1.setText("开始分享");
try{
se=newsend(newFile(lfile),InetAddress.getByName(tf
.getText()));
se.start();//启动发送线程
}catch(UnknownHostExceptione1){
l1.setText("输入地址有误!
");
}
}else{//若用户事先选择“接收”
receivere;
l1.setText("开始接收");
try{
re=newreceive(newFile(sfile),InetAddress.getByName(tf.getText()));
re.start();//启动接收线程
}catch(UnknownHostExceptione1){
l1.setText("输入地址有误!
");
}
}
}
}
}
接收模块:
classreceiveextendsThread{
Sockets;
Filefile;
InputStreamin;
FileOutputStreamfos;
BufferedOutputStreambos;
intstr;
InetAddressra;
receive(Filefile,InetAddressra){//本地发起连接时构造方法(接收对方地址)
this.file=file;
this.ra=ra;
}
receive(Filefile){//本地接收连接时构造方法
this.file=file;
}
publicvoidrun(){
try{
this.fos=newFileOutputStream(file);//建立文件输出流
}catch(FileNotFoundExceptione1){
surface.rinfo.setText("文件打开失败!
");
}
try{
this.bos=newBufferedOutputStream(fos);
if(ra==null){//若未得对方地址,表示本机接收连接
ServerSocketss=newServerSocket(9999);//监听端口9999
s=ss.accept();
}else//否则本机发起连接
s=newSocket(ra,9999);
in=s.getInputStream();
while((str=in.read())!
=-1)//读入输入流直至末尾
bos.write(str);
surface.rinfo.setText("接收成功!
");
bos.close();
fos.close();
in.close();
s.close();
}catch(IOExceptione){
surface.rinfo.setText("接收失败!
");
}
}
}
分享模块:
classsendextendsThread{
Sockets;
Filefile;
intinfo;
OutputStreamout;
FileInputStreamfis;
BufferedInputStreambis;
intstr;
InetAddressra;
send(Filefile,InetAddressra){//本地发起连接时构造方法(接收对方地址)
this.file=file;
this.ra=ra;
}
send(Filefile){//本地接收连接时构造方法
this.file=file;
}
publicvoidrun(){
try{
this.fis=newFileInputStream(file);//建立文件输入流
}catch(FileNotFoundExceptione1){
surface.sinfo.setText("文件打开失败!
");
}
try{
this.bis=newBufferedInputStream(fis);
if(ra==null){//若未得对方地址,表示本机接收连接
ServerSocketss=newServerSocket(9999);//监听端口9999
s=ss.accept();
}else//否则本机发起连接
s=newSocket(ra,9999);
out=s.getOutputStream();
while((str=bis.read())!
=-1)//读入缓冲输入流直至末尾
out.write(str);
surface.sinfo.setText("分享成功!
");
bis.close();
fis.close();
out.close();
s.close();
}catch(IOExceptione){
surface.sinfo.setText("分享失败!
");
}
}
}
1.程序启动界面
2.接收成功界面
3.分享成功界面
4.对方IP输入有误,传输失败。
三、总结
java是面向对象语言,把一切都看作对象,操作由相关类实例化得到的对象执行。
通过本次课程设计,我基本了解了java网络编程、多线程编程、基本输入/输出的基本知识,巩固了界面设计和事件响应编程的操作。
感谢我们的任课老师张老师以及其他课程设计的辅导老师!
四、参考文献
1.吕凤翥马皓Java语言程序设计清华大学出版社
2.陈炜Java语言程序设计案例教程人民邮电出版社
3.张永常JAVA程序设计实用教程电子工业出版社
4.施霞萍JAVA程序设计教程机械工业出版社
5.辛运帏等Java程序设计清华大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- P2P 文件 共享 程序 面向 对象 综合 设计 报告