ftp client的开源实现

ftp client的开源实现

首页
http://www.sauronsoftware.it/projects/ftp4j/

下载得到文件
ftp4j-1.3.1.zip

文档库地址
http://www.sauronsoftware.it/projects/ftp4j/manual.php

需要引入的JAR包
<dependency>
<groupId>it.sauronsoftware</groupId>
<artifactId>ftp4j</artifactId>
<version>1.3.1</version>
</dependency>
呵呵,这个JAR是我自己上传到我的MAVEN私服上面滴,其实就是ftp4j-1.3.1.zip里面解开压缩得到的JAR

对于这个东东,也是新鲜而已,参考官方的文档写了个测试,没有测试性能如何,
测试类FtpClientTest.java的全文如下:
package com.sillycat.easyftpclient.client;
import it.sauronsoftware.ftp4j.FTPAbortedException;
import it.sauronsoftware.ftp4j.FTPClient;
import it.sauronsoftware.ftp4j.FTPDataTransferException;
import it.sauronsoftware.ftp4j.FTPException;
import it.sauronsoftware.ftp4j.FTPFile;
import it.sauronsoftware.ftp4j.FTPIllegalReplyException;
import it.sauronsoftware.ftp4j.FTPListParseException;
import java.io.File;
import java.io.IOException;
public class FtpClientTest {
public static void main(String[] args) {
FTPClient client = new FTPClient();
try {
// 连接
client.connect("localhost", 2221);
// 登陆
client.login("admin", "admin");
// 得到当前目录
String dir = client.currentDirectory();
// 列表当前文件
FTPFile[] files = client.list();
if (files != null && files.length > 0) {
for (int i = 0; i < files.length; i++) {
FTPFile f = files[i];
if (f.getName().equalsIgnoreCase("test1")
&& FTPFile.TYPE_DIRECTORY == f.getType()) {
//如果目录test1已经有了,那么删除它
client.deleteDirectory(dir + "/test1");
break;
}
}
}
// 新增目录test1
client.createDirectory(dir + "/test1");
// 进入目录test1
client.changeDirectory(dir + "/test1");
//返回上级目录
client.changeDirectoryUp();
// 上传图片文件
client.upload(new File("E:\\work\\ftp\\upload\\test2.jpg"),new MyTransferListener());
// 上传压缩文件
client.upload(new File("E:\\work\\ftp\\upload\\test3.rar"),new MyTransferListener());
//改名
client.rename("test2.jpg", "cc.jpg");
//移动位置
client.rename("test3.rar", dir + "/test1/dd.rar");
//下载图片
client.download("cc.jpg", new File("E:\\work\\ftp\\download\\cc.jpg"),new MyTransferListener());
//下载压缩文件
client.download(dir + "/test1/dd.rar", new File("E:\\work\\ftp\\download\\dd.rar"),new MyTransferListener());
//删除FTP服务器上文件
client.deleteFile(dir + "/test1/dd.rar");
// 退出
client.logout();
// 释放连接
client.disconnect(true);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (FTPIllegalReplyException e) {
e.printStackTrace();
} catch (FTPException e) {
e.printStackTrace();
} catch (FTPDataTransferException e) {
e.printStackTrace();
} catch (FTPAbortedException e) {
e.printStackTrace();
} catch (FTPListParseException e1) {
e1.printStackTrace();
}
}
}

下载和上传的时候的监听器MyTransferListener实现FTPDataTransferListener接口
package com.sillycat.easyftpclient.client;

import it.sauronsoftware.ftp4j.FTPDataTransferListener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class MyTransferListener implements FTPDataTransferListener {

private Log log = LogFactory.getLog(getClass());

public void aborted() {
log.info("abort-----------------");
}

public void completed() {
log.info("complete-----------------");
}

public void failed() {
log.info("fail-----------------");
}

public void started() {
log.info("start-----------------");
}

public void transferred(int length) {
log.info("length---------------: " + length);
}

}
ftp客户端ftpclient纯C语言winsock实现socket编程 /* *本程序是2009年计算机网络课程设计作品。 *本程序参考rfc959标准。能准确与遵守此标准的服务器进行信息交互。 *本人不保留任何版权。 *本程序仅供学习研究测试使用。因使用本程序所有或部分代码所产生的任何后果,本人均不负任何法律责任。 *2009年7月13日 */ #include #include #include /*system()*/ #include #pragma comment(lib,"ws2_32.lib") #define ONUM 512 #define MNUM 512 #define FNUM 512 #define pt struct host { char ip[20]; unsigned short port; }; SOCKET ts; fd_set readfds; struct timeval timeval; struct host host; char renum[4]; char ordertemp[ONUM]; char order[ONUM]; char ordercp[ONUM]; char mess[MNUM]; char file[FNUM]; char setpath[FNUM]; char setpathf[FNUM]; int i,door,r,sys,seti;/*i for;door switch;r receive num;sys system state;set set state*/ char *p;/*strtok*/ int printmess(); void input(char ordertemp[]); int ftp(); int user(); int pass(); int command(); int list(); SOCKET createDataSocket(); int set(); int retr(); int stor(); int stor() { char filename[256]; SOCKET ds; int wi; int r2,r3,r4,bsnum,brnum; FILE *fp=NULL; set(); memset(filename,'\0',256); memset(order,'\0',ONUM); for(i=5;ibsnum); }/*while*/ printf("\n"); switch(printmess()) { case 425: case 426: case 451: case 551: case 552:closesocket(ds);fclose(fp);return -1; case 250: case 226:fclose(fp);return 0; default:return 0; } }/*stor*/ int retr() { char filename[256]; unsigned long fsize,wfsize; int r2,wi; SOCKET ds; FILE *fp=NULL; memset(filename,'\0',256); memset(order,'\0',ONUM); for(i=5;i<=200&&ordercp[i]!='\0';i++)order[i-5]=ordercp[i]; strcpy(filename,setpathf); strcat(filename,"\\\\"); strcat(filename,order); ds=createDataSocket(); if(ds==-1)return -1; memset(order,'\0',ONUM); strcpy(order,"type i\r\n");/*type i 二进制 type a ASCII*/ send(ts,order,strlen(order),0); switch(printmess()) { case 421:closesocket(ds);closesocket(ts);sys=0;return 421; case 530:closesocket(ds);sys=1;return -1; case 500: case 501: case 504: case 226:closesocket(ds);return -1; case 200:break; default:closesocket(ds);return -1; } strcat(ordercp,"\r\n"); send(ts,ordercp,strlen(ordercp),0); switch(printmess()) { case 421:closesocket(ds);closesocket(ts);sys=0;return 421; case 530:closesocket(ds);sys=1;return -1; case 450: case 500: case 501: case 550:closesocket(ds);return -1; case 125: case 150:break; default:closesocket(ds);return -1; } set(); system(setpath); fp=fopen(filename,"wb"); if(!fp){printf("create file fail!\n");closesocket(ds);printmess();return -1;} wi=1;fsize=0;wfsize=0; while(wi) { memset(file,'\0',FNUM); r=recv(ds,file,FNUM,0); if(r==SOCKET_ERROR) { printf("file recv error!\n"); closesocket(ds); fclose(fp); return -1; } fsize=fsize+r; if(r==0){wi=0;break;} printf("receive %8d bytes! have received %16d bytes!\r",r,fsize); r2=fwrite(file,sizeof(char),r,fp); fflush(fp);/*这里是关键*/ wfsize=wfsize+r2; printf("write %8d bytes!have written %20d bytes!\r",r2,wfsize); }/*while*/ printf("\n"); switch(printmess()) { case 425: case 426: case 451:closesocket(ds);fclose(fp);return -1; case 250: case 226: closesocket(ds); wi=1; while(wi)if(fclose(fp)==0)wi=0;return 0; default:return 0; } }/*retr()*/ 以下代码请下载本程序。VC++6.0编译通过
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值