《面向对象程序设计实践教程》
课题设计报告
专业: 信息管理与信息系统
班级: 04级信管2班
姓名: 陈裕锋
学号: 0402286
指导老师: 郑燕娥
日期: 2007-11-1
仰恩大学计算机系
一、 课程序设计目的
(2)掌握基于UDP的网络程序设计;
(3)编写远程文件传输程序,实现在二台远程主机之间传输任意文件。
二、 开发环境
(1)系统环境:Windows XP
(2)编程环境:JDK1.6,JCreator Pro V3.50.013 版
实现过程
(1) Java网络编程基础知识介绍
网络编程就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是到主机后如何可
靠高效的进行数据传输。在TCP/IP支撑 作文协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。
目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。
一般的TCP/IP网络数据通信主要可分2种,TCP和UDP两个协议
TCP: 即传输控制协议,是一种面向连接的传输层协议。通过使用序列号和确认信息,TCP协议能够向发送方提供到达接收方的数据包的传送信息。当传送过程中出现数据包丢失情况时,TCP协议可以重新发送丢失的数据包直到数据成功到达接收方或者出现网络超时。TCP协议还可以识别重复信息,丢弃不需要的多余信息,使网络环境得到优化。如果发送方传送数据的速度大大快于接收方接收数据的速度,TCP协议可以采用数据流控制机 制减慢数据的传送速度,协调发送和接收方的数据响应。TCP协议能够把数据传送信息传递给所支持的更高层次的协议或应用使用。
一般套接字(TCP)提供一个可靠的传输模型作为两个网络端点的字节流, 可以把套接字比喻为打电话,一方呼叫,另一方负责监听,一旦建立了套接字连接,双方就可以进行通信,提供无差错、发送先后顺序一致的、包长度不限和非重复的网络信包传输、适用于一次要传输交换
大量报文的情况,信道上传递的包不需要源地址和目的地址. java提供了ServerSocket和socket类。在server端,建立一个serverSocket,并指定端口,并侦听连接.
ServerSocket sc=new ServerSocket(1234);
Socket socket1= sc.accept();
DataInputStream s_in = new InputStream());
客户端代码
Socket socket2 = new Socket("localhost",1234);
UDP: 是一种无连接的协议,每个数据报都是一个独立的信息,没有保持的连接和数据流,数据报是一个网络上发送的独立信息,它的到达时间,以及内容不能得到保证,但UDP提供高效率服务,适用于依次传输交换少量报文的情形 (如数据库查询),每个数据包要包含目的地址和端口号.数据报传输有大小限制,每个传输的数据包必须限定在64KB之内。UDP通信比作邮递信件,我们不能确定所发的信件就一定能够到达目的地,也不能确定到达的顺序是发出时的顺序,可能因为某种原因导致后发出的先到达,另外,也不能确定对方收到信就一定会回信。
服务器端代码:
DatagramSocket server = new DatagramSocket(1234);
DatagramPacket in_packet =new DatagramPacket(in_buf,2000);
ieve(in_packet);
客户端代码:
DatagramSocket client= new DatagramSocket(1235);
DatagramPacket out_packet= new DatagramPacket (out_buf,100,"127.00.1",1234);
client.send(out_packet);
(2)远程文件传输概要设计
总体流程图:
说明:当客户端要发送文件给服务器端时,先把文件名发送给服务器端,服务器端判断是否要接收,如果要接受文件则则返回同意接收,客户端开始发送文件,服务器端开始接收文件,接着客户端判断是否发送完成,服务器端判断是否接收完成。最后客户端完成发送,服务器端完成接收。
客户端流程图:
说明:作为客户端(发送方),首先向服务器端发送要发送的文件名,接收方判断是否接收文件,如果服务器端同意接收,客户端则发送文件,否则就取消发送退出程序。
服务器端流程图:
说明:作为服务器端,首先不断的监听来至客户端的端口,当客户端发送文件名到服务器,端,服务器端判断是否要接收文件,如果要接收,则选择文件保存的位置,客户端就开始发送数据,最后判断是否发送完成,直到接收完成。
(3)远程文件传输详细设计
客户端程序详细设计:
类名:Send (主函数类)
类功能:客户端发送文件。
方法1:send()
功能:主函数类,布局主窗口。
方法2:SendFile()
功能:线程类,启动线程发送文件。
类名:Socket
类功能:用于客户端套接字
方法1:Socket(int prot)
功能:服务器使用该方法监听指定的端口
参数:prot 表示随意制定的(一般使用1024以上的端口)的端口
方法2:Socket(host_IP,prot)
功能: 制定端口
类名:SendFile
类功能:线程类,负责处理发送文件。
方法1:run();
功能:把文件名发送到服务器端,并且判断服务器端是否接收,如果接受就发送,完成后关闭流。
方法2:getName();
功能:返回由此抽象路径名表示的文件或目录的名称。
方法3:readBoolean();
功能:读取一个布尔值,为真返回true ,为假返回false。
方法4:flush()
功能:通过将所有已缓冲输出写入基础流来刷新此流。
方法5:append(String str)
功能:向文本区追加文本内容。bcb
方法6:showOpenDialo (Component parent)
功能:弹出一个 "Open File" 文件选择器对话框。
方法7:Accept()
功能:用于产生“阻塞”,直至接收到来之客户的一个连接,并且返回客户端的Socket对象实例。
方法8:GetOutputStream()
功能:连接的另一端将得到输入,同时返回一个OutputStream对象实例。
服务器端详细设计:
类名:Receive(主函数类)
类功能:服务器端接收文件。
方法1:Receive()
功能:主函数类,布局主窗口。
方法vhdl数字电路设计教程2:FileReceive ()
功能:线程类,启动线程接收文件。
类名:ServerSocket
类功能:用于客户端套接字
方法1:ServerSocket(int prot)
功能:创建绑定到特定端口的服务器套接字。
方法2:ServerSocket(int port, int backlog)
功能:利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。
方法3:Accept()
功能:用于产生“阻塞”,直至接收到来之客户的一个连接,并且返回客户端的Socket对象实例。
类名:FileReceive
类功能:线程类,负责处理接收文件。
方法1:GetInputStream()
功能:获得网络连接输入,同时返回一个IuputStream对象实例。
方法2:run();
功能:确认是否接收,若接收客户端发送文件,服务器端开始接收文件,直到接收完成,提示接收完毕。
(4)界面介绍
客户端界面(发送端):
说明:当按下发送按钮弹出文件选择器,选中想要发送的文件发送,文本区显示要发送的文件名,当接收端开始接收,发送端显示“开始发送”,接收端接受完成,发送端显示“发送完成”并且显示文件存储的位置。
服务器端界面(接收端):
说明:当客户端发送文件过来,服务器端显示“开始接受文件”以及文件名,当按下按钮“另存为”选择路径存储文件后,客户端开始发送文件,服务器端显示“开始接受…”,当服务器端接收完毕后显示“接受完成”以及文件的存放位置。
取消界面:
说明:当客户端想要取消发送时,按下“取消”按钮,程序退出,并且显示“用户取消发
送”。
当服务器端想要取消接收时,按下“取消” 按钮,程序退出,并且显示“用户取
消接收”。
三、 课题总结
(1)主要问题
1、如何使界面布置的更加合理。
2、在创建输入输出流的时候如何控制。
3、在接收文件的时候如何建立机制确定和取消。
4、如何控制和开放端口号以便将数据输入输出。
(2)收获
1、在制作该程序的时候学会了建立套接字程序来向网络发出请求或者应答网络请求
2、学会使用GetIntputStream()方法获得网络连接输入,同时返回一个InputStream对象实例。居家新主张
3、学会使用GetOutputStream()方法连接的另一端得到输入,同时返回一个OutputStre
am对象实例。
4、学会利用线程发送和接收数据。
5、学习应用文件选择器选择文件,打开以及保存文件。
四、 教师评阅