课程设计报告范文
《计算机技术综合》
课程设计
学生姓名: 何 妞
学 号: 6103105048
专业班级: 计算机051班
指导教师: 林振荣
二00八 年 7 月 4 日
目 录
1.课程设计目的 „„„„„„„„„„„„„„„„„„„2
2.课程设计题目描述和要求 „„„„„„„„„„„„„„2
3.课程设计内容 „„„„„„„„„„„„„„„„„„„2
4.课程设计总结 „„„„„„„„„„„„„„„„„„„12
5.参考书目 „„„„„„„„„„„„„„„„„„„„„12
1.课程设计目的
1.加深典型的Client/Server编程;
2.理解发送和接收数据的协议匹配;
3.学会使用线程机制来建立服务器;
4.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
2.课程设计题目描述和要求
实现文件传输功能
主要功能:
(1)有客户端和服务器端
(2)客户端可以上传各种类型的文件
(3)服务器端可以接受很多文件上传
(4)客户端发出请求后,在服务器端应答后能将文件传到服务器上
(5)实验实现时用环回测试将本机看作客户端和服务器端
3.课程设计报告内容
3.1课程设计源程序
程序1-->Client.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;
public class Client extends JFrame implements ActionListener{ String str=
private JTextField t1;
private JLabel l1,l2;
private JButton Exit,Ok,Open;
private JFileChooser choose=new JFileChooser();
private File Myfile;
public Client(){
Container c=getContentPane();
Panel p1=new Panel();
Panel p2=new Panel();
Panel p3=new Panel();
c.setLayout(new GridLayout(3,1));
p1.setLayout(new FlowLayout());
p2.setLayout(new FlowLayout());
p3.setLayout(new GridLayout(2,1));
t1=new JTextField(35);
l1=new JLabel(
l2=new JLabel(
Exit=new JButton(
Ok=new JButton(
Open=new JButton(
Exit.addActionListener(this);
Ok.addActionListener(this);
Open.addActionListener(this);
p1.add(t1);
p1.add(Open);
c.add(p1);
p2.add(Ok);
p2.add(Exit);
c.add(p2);
p3.add(l1);
p3.add(l2);
c.add(p3);
setSize(500,200);
show();
}
public void actionPerformed(ActionEvent e){
str=
if(e.getSource()==Exit){System.exit(0);}
try{
}
if(e.getSource()==Open){
if(e.getSource()==Ok){ } System.out.println(t.toString()); if(t1.getText()!=
}
} this.openf();
public void openf(){
}
public void client(){
int result=choose.showOpenDialog(null); Myfile=choose.getSelectedFile(); if(result==JFileChooser.APPROVE_OPTION){ } else if(result==JFileChooser.CANCEL_OPTION){ } t1.setText(
String tmp=String.valueOf(size)+over; byte bsize[]=tmp.getBytes(); //文件大小 ps.write(bsize); ps.flush(); String s2=br.readLine(); str=
str=
}
public static void main(String args[]){
}
} l2.setText(str); FileInputStream in=new FileInputStream(Myfile); BufferedInputStream bf=new BufferedInputStream(in); ff=new byte[1024]; int c; while((c=bf.read(ff))!=-1){ } ps.close(); bf.close(); in.close(); clientSocket.close(); t1.setText(
程序2-->Server.java
import java.net.*;
import java.io.*;
import java.util.*;
class MyThread extends Thread{
private Socket clientSocket; private int counter; public MyThread(Socket i,int c){ } //采用同步机制 public synchronized void run(){ try{ DataInputStream br=new DataOutputStream output=new //文件大小 byte[] n=new byte[225]; br.read(n); output.write(n); output.flush(); //文件名 byte[] ll=new byte[255]; br.read(ll); output.write(ll); output.flush(); String tmpe=new String(ll); int a=Integer.parseInt(tmpe.trim()); //创建文件用于保存上传的文件 String names=new String(n); File Myfile=new File(
} } } byte ff[]=new byte[1024]; int c=0; //把上传的数据输出至文件 while((c=br.read(ff))!=-1){ } bw.close(); output.close(); out.close(); br.close(); clientSocket.close(); System.out.println(e); bw.write(ff,0,c); }catch(Exception e){
public class Server{
private static Socket clientSocket; private static int counter; public static void main(String[] args){ int i=1; ServerSocket serverSocket; try{ serverSocket=new ServerSocket(8765); while(true){
System.out.println(
} //监听与本socket的连接并且接受它 clientSocket=serverSocket.accept(); //创建线程,将上传数据写至服务器的文件中 Thread t=new MyThread(clientSocket,i); t.start(); i++; System.out.println(
} } System.out.println(e); }
3.2实验结果
① 测试程序结果时,要先运行服务器端程序Server.Java,让服务器端准备好接受客户端请求,然后才能运行客户端程序,如图1。
图 1 等待接受上传文件
② 运行客户端程序Client.Java,效果如图2。
图 2
③ 点击“浏览”,弹出文件对话框,如图3所示。
图 3
④ 找到某个目录下的某个文件,然后打开。我选择了D:\[国产][井冈山][国语][TVRIP-RMVB][TF]\[TF]井冈山01.Rmvb,打开后效果如图4。
图 4
⑤ 点击“上传”后,等待一段时间后Client.Java程序运行效果如图5。
图 5
⑥ 服务器端程序运行效果如图6。
图 6
⑦ 用于保存上传的文件的目录里面多了个上传的文件,如图7。
图 7
⑧ 再上传一个文件,如图8。
图 8
⑨ 点击“上传”后运行效果如图9。
图 9
⑩ 服务器端运行效果如图10。
图 10
11 用于保存上传的文件的目录里面又多了个刚上传的文件,如图11。
图 11
4.结论
在做课程设计以前,我对文件传输的理解只是停留在理论知识的水平上,是“纸上谈兵”,缺乏实际的程序设计经验。这次通过做课程设计,我基本完成了老师下达的设计任务。
这是我这个课程设计的第二次设计,之前第一次的设计报告发给老师后完全不符合老师的要求,因为上学期课程设计的老师和林老师不一样,而我是完全按照上学期的思维来写设计报告的。
在这次的设计过程中我几乎完全改了第一次的程序,在看了老师的模板后,我才知道自己的第一次的设计报告有多乱多繁琐,而且没有图形界面,没有良好的交互性。现对这次的设计几点体会总结如下:
其一,本程序我选择用java进行开发。由于之前学过java语言,所以有一定的基础,但是因为过了比较长的时间,关于java的很多知识都忘记了,很多java 组件都不知道怎么用,后来经过努力复习才记起了那些基本知识。
其二, 在接到任务后我发现自己完全不懂网络编程的知识,而这个课程设计又要用到网络编程的知识,但是经过自己到图书馆查阅很多资料,最终掌握了网络编程的技巧,并完成了这次的编程。
其三,通过这次编程,我学会了运用java语言进行网络编程,提高了自身的网络编程能力。
总之,经过这几天的努力,我最终完成了“基于java的文件传输功能实现”的设计。在整个设计过程中,我不仅巩固了java知识和网络知识, 而且也达到了锻炼自己的目的,同时进一步加深了对编程的认识和理解。此次课程设计给我提供了一个既动手又动脑、自学、独立实践的机会,使我们养成了勤翻阅各种相关资料的习惯,将书本上的理论知识和实际有机地结合起来,锻炼了实际分析问题和解决问题的能力,提高了适应实际、实践编程的能力,为今后的学习和实践打下了良好的基础。 参考书目:
[1] 陈轶,姚晓昆 《Java程序设计实验指导》 机械工业出版社 2006
[2] 邱桃熔,林振荣,冯缨 《Java语言程序设计教程》 机械工业出版社 2005
[3] 谢希仁 计算机网络 大连理工大学出版社 2005