用Java实现Socket及ftp下载(1)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用JAVA实现Socket通讯及Ftp下载
需求分析
在大亚湾实时数据接收过程中,Unix工作站中通过API调用从进程中实时获取各个测
点的实时数据,并将数据以文件的形式保存到Ftp目录中。

Unix通知Win dow(Windows 2000) 平台从ftp上下载数据文件。

我们要完成的工作是,通过协议完成Unix与Windows平台的通讯,然后,控制Windows平台从ftp上下载指定文件。

解决方案
考虑到文件是在异构系统(UNIX与WINDOWS之间传输,为了有更好的移植性,我们决
定用JAVA进行开发。

要解决通讯,首先设置好协议。

根据需求,协议是这样定义的:
消息格式:
其中,消息头固定为“ kdc ”。

消息号为通知对方的行动信号。

AskForDow nl oad="1";
WaitForDow nl oad="2";
AllowDow nload="81";
Dow nloadFile="82";
以上为常数。

数据块为用于进行FTP操作的参数(若为空则以“# ”表示)。

通讯方式:
服务器通知客户端下载。

客户端向服务器提出下载申请,消息中包含有用户名。

服务器收到从客户端发来的消息后,对客户进行身份验证,若通过则向客户端发出允许下载
的消息,将下载文件的路径传给客户端;客户端收到允许下载消息后,便准备下载,将准备下载的消息传给服务器;服务器收到消息后,将口令传给用户;用户收到后,开始下载。

具体实现
用JAVA实现SOCKET!讯及FTP下载,需要引用以下包:
java.io.*; java .n et.*; sun.n et.*;s un.n et.ftp.*;
Socket操作的步骤:
(1) 打开一个Socket o
(2) 打开输入输出流。

(3) 通过服务协议读写流。

(4) 关闭流。

(5) 关闭Socket o
Ftp操作步骤:
(1)连接Ftp服务器。

(2)打开流,创建一个文件实例。

(3)将Ftp上的文件写入流,然后在从流写到客户端的文件实例中。

(4)关闭流。

5) 关闭Ftp服务。

对消息的解析消息中包含有三部分内容:头部,消息号,数据块。

在发送时,消息是以字符串的形式传送的。

所以首先,必须把三部分内容从消息中分离出来。

我们的解决办法是引用
java.util.* 中的StringTokenizer 类。

先用消息字符串创建StringTokenizer 的实例,然后用StringTokenizer 类中的nexttoken() 方法对其进行分离,在将三部分内容分别赋给三个已定义好的变量。

将消息中的三部分分离出来后,将其传给协议类的action(String head,String type,String infor) 方法,根据不同的消息进行相应的行动。

意外处理
在进行通讯和进行FTP 操作时,会出现一些意外,比如,创建端口错误,连接失败,消息格式不正确,连接FTP 服务器是登录错误等。

由于,双方的通讯均为自动进行,出现意外若将此操作重复,没有任何意义,只会导致死循环,所以,我们的做法是,停止通讯,发送报错消息,通知对方管理员,检查其通讯配置及消息格式是否正确,并做适当的修改,然后再重新进行通讯。

安全问题
这是我们在程序中没有解决的地方,具体表现在,服务器要将登录FTP的口令传送给客
户端,由于没有加密措施,在传送过程中,可能会被窃取,这将导致可能会有其他机器访问FTP服务器。

所以,这个问题,必须要解决。

相关文档
最新文档