c测试ftp
我在一个内网上测试了一下,PORT方式通过。不过奇怪的是我在两太机器上测试客户端,结果有防火墙的通过,没防火墙的却建立不了数据连接。
现在根据项目需要,我得采取PASV模式,不过如何从发送“PASV”命令后返回的信息中提取我们要连接的端口都让我头疼。
Ⅱ C语言实现从FTP下载、上传文件
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。
1.C语言可以使用CStdioFile函数打开本地文件。使用类CInternetSession 创建并初始化一个Internet打开FTP服务器文件。
CStdioFile继承自CFile,一个CStdioFile 对象代表一个用运行时函数fopen 打开的C 运行时流式文件。
流式文件是被缓冲的,而且可以以文本方式(缺省)或二进制方式打开。文本方式提供对硬回车—换行符对的特殊处理。当你将一个换行符(0x0A)写入一个文本方式的CStdioFile 对象时,字节对(0x0D,0x0A)被发送给该文件。当你读一个文件时,字节对(0x0D,0x0A)被翻译为一个字节(0x0A)。
CStdioFile 不支持Duplicate,LockRange,和UnlockRange 这几个CFile 函数。如果在CStdioFile 中调用了这几个函数,将会出现CNoSupported 异常。
使用类CInternetSession 创建并初始化一个或多个同时的Internet 会话。如果需要,还可描述与代理服务器的连接。
如果Internet连接必须在应用过程中保持着,可创建一个类CWinApp的CInternetSession成员。一旦已建立起Internet 会话,就可调用OpenURL。CInternetSession会通过调用全局函数AfxParseURL来为分析映射URL。无论协议类型如何,CInternetSession 解释URL并管理它。它可处理由URL资源“file://”标志的本地文件的请求。如果传给它的名字是本地文件,OpenURL 将返回一个指向CStdioFile对象的指针。
如果使用OpenURL在Internet服务器上打开一个URL,你可从此处读取信息。如果要执行定位在服务器上的指定的服务(例如,HTTP,FTP或Gopher)行为,必须与此服务器建立适当的连接。
Ⅲ 当进行ftp测试时,主要可以获取一下哪些指标
当进行FTP测试时,主要可以获取以下哪些指标?
A、FTP应用层下载速率
B、FTP下载RLC层平均吞吐量
C、FTP应用层平均吞吐量
D、FTP下载RLC层平均BLER
这道题答案是ABD
Ⅳ Linux/unix环境下C调用FTP如何进行
可以使用管道,下面是我的程序,你可以参考:
#include <stdio.h>
main(int argc, char *argv[]){
FILE *fp;
char str[255];
if (argc!=5){
printf("%s\n%s\n",
"Usage:",
" auto_ftp <ip> <user> <pass> <filename>");
exit();
}
if ((fp=popen("ftp -n","w"))==NULL) {
puts("Run ftp fail !");
exit();
}
//while ((fgets(str,255,fp))!=NULL) puts(str);
fprintf(fp,"open %s\n",argv[1]);
fprintf(fp,"user %s %s\n",argv[2],argv[3]);
fprintf(fp,"prompt\n");
fprintf(fp,"mget *%s\n",argv[4]);
fprintf(fp,"bye\n");
pclose(fp);
}
以上程序编译为auto_ftp,能够自动从命令行指定的IP、用户、密码下载指定的文件。
补充:
上载、下载都是一样的,都是通过管道调用ftp工具,C程序只需要发送命令即可,这些命令可以是任何命令,我程序中是GET,你也可以写PUT。
Ⅳ java如何测试连接ftp是否通
java测试连接ftp是否连通可以使用判断是否有异常来决定,实例如下:
/**
*connectServer
*连接ftp服务器
*@throwsjava.io.IOException
*@parampath文件夹,空代表根目录
*@parampassword密码
*@paramuser登陆用户
*@paramserver服务器地址
*/
publicvoidconnectServer(Stringserver,Stringuser,Stringpassword,Stringpath)
throwsIOException
{
//server:FTP服务器的IP地址;user:登录FTP服务器的用户名
//password:登录FTP服务器的用户名的口令;path:FTP服务器上的路径
ftpClient=newFtpClient();
ftpClient.openServer(server);
ftpClient.login(user,password);
//path是ftp服务下主目录的子目录
if(path.length()!=0)ftpClient.cd(path);
//用2进制上传、下载
ftpClient.binary();
}
/**
*upload
*上传文件
*@throwsjava.lang.Exception
*@return-1文件不存在
*-2文件内容为空
*>0成功上传,返回文件的大小
*@paramnewname上传后的新文件名
*@paramfilename上传的文件
*/
publiclongupload(Stringfilename,Stringnewname)throwsException
{
longresult=0;
TelnetOutputStreamos=null;
FileInputStreamis=null;
try{
java.io.Filefile_in=newjava.io.File(filename);
if(!file_in.exists())return-1;
if(file_in.length()==0)return-2;
os=ftpClient.put(newname);
result=file_in.length();
is=newFileInputStream(file_in);
byte[]bytes=newbyte[1024];
intc;
while((c=is.read(bytes))!=-1){
os.write(bytes,0,c);
}
}finally{
if(is!=null){
is.close();
}
if(os!=null){
os.close();
}
}
returnresult;
}
/**
*upload
*@throwsjava.lang.Exception
*@return
*@paramfilename
*/
publiclongupload(Stringfilename)
throwsException
{
Stringnewname="";
if(filename.indexOf("/")>-1)
{
newname=filename.substring(filename.lastIndexOf("/")+1);
}else
{
newname=filename;
}
returnupload(filename,newname);
}
/**
*download
*从ftp下载文件到本地
*@throwsjava.lang.Exception
*@return
*@paramnewfilename本地生成的文件名
*@paramfilename服务器上的文件名
*/
publiclongdownload(Stringfilename,Stringnewfilename)
throwsException
{
longresult=0;
TelnetInputStreamis=null;
FileOutputStreamos=null;
try
{
is=ftpClient.get(filename);
java.io.Fileoutfile=newjava.io.File(newfilename);
os=newFileOutputStream(outfile);
byte[]bytes=newbyte[1024];
intc;
while((c=is.read(bytes))!=-1){
os.write(bytes,0,c);
result=result+c;
}
}catch(IOExceptione)
{
e.printStackTrace();
}
finally{
if(is!=null){
is.close();
}
if(os!=null){
os.close();
}
}
returnresult;
}
/**
*取得某个目录下的所有文件列表
*
*/
publicListgetFileList(Stringpath)
{
Listlist=newArrayList();
try
{
DataInputStreamdis=newDataInputStream(ftpClient.nameList(path));
Stringfilename="";
while((filename=dis.readLine())!=null)
{
list.add(filename);
}
}catch(Exceptione)
{
e.printStackTrace();
}
returnlist;
}
/**
*closeServer
*断开与ftp服务器的链接
*@throwsjava.io.IOException
*/
publicvoidcloseServer()
throwsIOException
{
try
{
if(ftpClient!=null)
{
ftpClient.closeServer();
}
}catch(IOExceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args)throwsException
{
FtpUtilftp=newFtpUtil();
try{
//连接ftp服务器
ftp.connectServer("10.163.7.15","cxl","1","info2");
/**上传文件到info2文件夹下*/
System.out.println("filesize:"+ftp.upload("f:/download/Install.exe")+"字节");
/**取得info2文件夹下的所有文件列表,并下载到E盘下*/
Listlist=ftp.getFileList(".");
for(inti=0;i<list.size();i++)
{
Stringfilename=(String)list.get(i);
System.out.println(filename);
ftp.download(filename,"E:/"+filename);
}
}catch(Exceptione){
///
}finally
{
ftp.closeServer();
}
}
}
Ⅵ UNIX中C语言调用FTP命令的问题
写一个脚本,执行上传文件的功能,在C 中调用,通过返回值判断是否成功
Ⅶ C语言如何连接FTP,连接成功后遍历FTP下目录,包括子目录,要源代码,而且是成功案例,自以为是的靠边站!
用libcurl实现,具体代码看
http://curl.haxx.se/libcurl/c/ftpget.html
Ⅷ 在linux中如何用C语言实现FTP上传
ftp协议还是比较麻烦的,FTP上传一般用script实现,几行就行。若用C写,起码4,5百行。
Ⅸ 关于c语言ftp项目运行问题
你这个是C++,不是C,看错误提示应该是缺少链接库(lib文件)
Ⅹ C语言怎么读取FTP上的文件
这样没法做到
可以用shell脚本来实现