当前位置:首页 > 代码 > 正文

ftp实现代码的简单介绍

admin 发布:2022-12-19 17:38 127


今天给各位分享ftp实现代码的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

如何在BAT批处理文件中实现FTP登陆

1、右键桌面空白处,新建-文本文档。

2、我们要修改文本文档的扩展名,修改扩展名为bat。

3、输入代码如下

@echooff

explorerftp://你的ftp用户名:你的ftp密码@你的ftp地址,经常会遇到这样的情况,请单击允许。

4、explorer是资源浏览器。因为我们的url格式是explorerftp:xxxx,所以,资源浏览器的协议会使用ftp协议。

如何用Java实现FTP服务器

FTP(File Transfer Protocol 文件传输协议)是Internet 上用来传送文件的协议。在Internet上通过FTP 服务器可以进行文件的上传(Upload)或下载(Download)。FTP是实时联机服务,在使用它之前必须是具有该服务的一个用户(用户名和口令),工作时客户端必须先登录到作为服务器一方的计算机上,用户登录后可以进行文件搜索和文件传送等有关操作,如改变当前工作目录、列文件目录、设置传输参数及传送文件等。使用FTP可以传送所有类型的文件,如文本文件、二进制可执行文件、图象文件、声音文件和数据压缩文件等。

FTP 命令

FTP 的主要操作都是基于各种命令基础之上的。常用的命令有:

设置传输模式,它包括ASCⅡ(文本) 和BINARY 二进制模式;

目录操作,改变或显示远程计算机的当前目录(cd、dir/ls 命令);

连接操作,open命令用于建立同远程计算机的连接;close命令用于关闭连接;

发送操作,put命令用于传送文件到远程计算机;mput 命令用于传送多个文件到远程计算机;

获取操作,get命令用于接收一个文件;mget命令用于接收多个文件。

?

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635

import java.net.Socket;import org.apache.log4j.Logger;/** * 角色——服务器A * @author Leon * */public class ServerA{ public static void main(String[] args){ final String F_DIR = "c:/test";//根路径 final int PORT = 22;//监听端口号 Logger.getRootLogger(); Logger logger = Logger.getLogger("com"); try{ ServerSocket s = new ServerSocket(PORT); logger.info("Connecting to server A..."); logger.info("Connected Successful! Local Port:"+s.getLocalPort()+". Default Directory:'"+F_DIR+"'."); while( true ){ //接受客户端请求 Socket client = s.accept(); //创建服务线程 new ClientThread(client, F_DIR).start(); } } catch(Exception e) { logger.error(e.getMessage()); for(StackTraceElement ste : e.getStackTrace()){ logger.error(ste.toString()); } } }}import java.io.BufferedReader; import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.io.RandomAccessFile;import java.net.ConnectException;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;import java.net.UnknownHostException;import java.nio.charset.Charset;import java.util.Random;import org.apache.log4j.Logger;/** * 客户端子线程类 * @author Leon * */public class ClientThread extends Thread { private Socket socketClient;//客户端socket private Logger logger;//日志对象 private String dir;//绝对路径 private String pdir = "/";//相对路径 private final static Random generator = new Random();//随机数 public ClientThread(Socket client, String F_DIR){ this.socketClient = client; this.dir = F_DIR; } @Override public void run() { Logger.getRootLogger(); logger = Logger.getLogger("com"); InputStream is = null; OutputStream os = null; try { is = socketClient.getInputStream(); os = socketClient.getOutputStream(); } catch (IOException e) { logger.error(e.getMessage()); for(StackTraceElement ste : e.getStackTrace()){ logger.error(ste.toString()); } } BufferedReader br = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); PrintWriter pw = new PrintWriter(os); String clientIp = socketClient.getInetAddress().toString().substring(1);//记录客户端IP String username = "not logged in";//用户名 String password = "";//口令 String command = "";//命令 boolean loginStuts = false;//登录状态 final String LOGIN_WARNING = "530 Please log in with USER and PASS first."; String str = "";//命令内容字符串 int port_high = 0; int port_low = 0; String retr_ip = "";//接收文件的IP地址 Socket tempsocket = null; //打印欢迎信息 pw.println("220-FTP Server A version 1.0 written by Leon Guo"); pw.flush(); logger.info("("+username+") ("+clientIp+") Connected, sending welcome message..."); logger.info("("+username+") ("+clientIp+") 220-FTP Server A version 1.0 written by Leon Guo"); boolean b = true; while ( b ){ try { //获取用户输入的命令 command = br.readLine(); if(null == command) break; } catch (IOException e) { pw.println("331 Failed to get command"); pw.flush(); logger.info("("+username+") ("+clientIp+") 331 Failed to get command"); logger.error(e.getMessage()); for(StackTraceElement ste : e.getStackTrace()){ logger.error(ste.toString()); } b = false; } /* * 访问控制命令 */ // USER命令 if(command.toUpperCase().startsWith("USER")){ logger.info("(not logged in) ("+clientIp+") "+command); username = command.substring(4).trim(); if("".equals(username)){ pw.println("501 Syntax error"); pw.flush(); logger.info("(not logged in) ("+clientIp+") 501 Syntax error"); username = "not logged in"; } else{ pw.println("331 Password required for " + username); pw.flush(); logger.info("(not logged in) ("+clientIp+") 331 Password required for " + username); } loginStuts = false; } //end USER // PASS命令 else if(command.toUpperCase().startsWith("PASS")){ logger.info("(not logged in) ("+clientIp+") "+command); password = command.substring(4).trim(); if(username.equals("root") password.equals("root")){ pw.println("230 Logged on"); pw.flush(); logger.info("("+username+") ("+clientIp+") 230 Logged on");// logger.info("客户端 "+clientIp+" 通过 "+username+"用户登录"); loginStuts = true; } else{ pw.println("530 Login or password incorrect!"); pw.flush(); logger.info("(not logged in) ("+clientIp+") 530 Login or password incorrect!"); username = "not logged in"; } } //end PASS // PWD命令 else if(command.toUpperCase().startsWith("PWD")){ logger.info("("+username+") ("+clientIp+") "+command); if(loginStuts){// logger.info("用户"+clientIp+":"+username+"执行PWD命令"); pw.println("257 /""+pdir+"/" is current directory"); pw.flush(); logger.info("("+username+") ("+clientIp+") 257 /""+pdir+"/" is current directory"); } else{ pw.println(LOGIN_WARNING); pw.flush(); logger.info("("+username+") ("+clientIp+") "+LOGIN_WARNING); } } //end PWD // CWD命令 else if(command.toUpperCase().startsWith("CWD")){ logger.info("("+username+") ("+clientIp+") "+command); if(loginStuts){ str = command.substring(3).trim(); if("".equals(str)){ pw.println("250 Broken client detected, missing argument to CWD. /""+pdir+"/" is current directory."); pw.flush(); logger.info("("+username+") ("+clientIp+") 250 Broken client detected, missing argument to CWD. /""+pdir+"/" is current directory."); } else{ //判断目录是否存在 String tmpDir = dir + "/" + str; File file = new File(tmpDir); if(file.exists()){//目录存在 dir = dir + "/" + str; if("/".equals(pdir)){ pdir = pdir + str; } else{ pdir = pdir + "/" + str; }// logger.info("用户"+clientIp+":"+username+"执行CWD命令"); pw.println("250 CWD successful. /""+pdir+"/" is current directory"); pw.flush(); logger.info("("+username+") ("+clientIp+") 250 CWD successful. /""+pdir+"/" is current directory"); } else{//目录不存在 pw.println("550 CWD failed. /""+pdir+"/": directory not found."); pw.flush(); logger.info("("+username+") ("+clientIp+") 550 CWD failed. /""+pdir+"/": directory not found.");

qt实现ftp创建文件夹命令

本文实例为大家分享了QT实现FTP上传文件的具体代码,供大家参考,具体内容如下

两台电脑通过网线建立本地连接,保证网关在同一段;

服务器端打开ftp;

控制面板→程序→启用或关闭windows功能→windows功能→Internet信息服务

启用“FTP服务”FTP扩展性” IIS管理控制台”

开始屏幕的搜索中输入“IIS”,然后点击打开“IIS管理器”

打开“IIS管理器”后,在左栏的“网站”上点击右键,打开“添加FTP站点”

然后按照提示填写站点信息

点击“下一步”,按照下图提示,设置“绑定和SSL设置”,在“IP地址”处,可以用内网IP也可以用外网IP,访客自然也就根据你的IP设定来决定;

点击“下一步”,设置“身份验证和授权信息”

然后在本机浏览器地址栏中输入“ftp://填写的IP”测试一下

客户端网页测试远程访问;

客户端(另一台电脑)浏览器地址栏中输入“ftp://填写的IP”测试一下

客户端cmd测试远程访问;

win+r打开运行窗口,输入cmd

回车打开cmd命令窗口

cmd命令中输入:ftp回车

回车切换至ftp命令窗口,输入命令:open,回车提示:到

到即所要连接测试的ftp地址,我们输入:IP 22

即:ip地址+空格+端口号,没有+号

回车后弹出用户一行,输入ftp的用户名后回车,输入ftp用户名对应的密码

输入密码后回车,如果提示,user logged in就说么ftp创建无问题

客户端程序测试远程访问。

新建程序,添加ftpclass.cpp、ftpclass.h,复制main.cpp内容到程序入口函数

注意:/项目-属性-常规-字符集-使用多字节字符集/

//main.cpp

#include "stdafx.h"

#include "ftpclass.h"

void main()

{

printf("------- 开始测试!------\n");

printf("01--创建连接 %d\n", FtpClass::createConnection());

printf("02--打开目标ftp %d\n", FtpClass::createTable());

/*可以读取ini内参数

FtpClass::ftp_Ip = TEXT("Ini读取");

FtpClass::ftp_Port = TEXT("Ini读取");

FtpClass::ftp_User = TEXT("Ini读取");

FtpClass::ftp_Password = TEXT("Ini读取");

FtpClass::ftp_Fixed_Path = TEXT("Ini读取");*/

printf("03--创建文件夹 %d\n", FtpClass::createFolder("自动生成目录1","自动生成目录2","自动生成目录3"));

/*上传目标路径*/

printf("04--上传文件 %d\n", FtpClass::insert( "D:/a.txt", "b.txt"));

/*本机文件需要上传文件*/ /*上传后文件名称,可以和本地文件名称不一样,类型最好别换*/

printf("05--关闭通讯 %d\n", FtpClass::createClose());

printf("------ 结束测试!------\n");

return ;

}

//ftpclass.h

/*项目-属性-常规-字符集-使用多字节字符集*/

/*wininet.lib、shlwapi.lib可以直接添加到附加依赖项*/

/*BOOL_VERIFY、NULL_VERIFY 程序结束判断*/

#pragma once

#pragma comment(lib,"wininet.lib")

#pragma comment(lib,"shlwapi.lib")

#define BOOL_VERIFY(emStatus_bool,switch_bool) \

if (emStatus_bool == true)\

{return true;}\

else{\

if (switch_bool == 3) printf(" FTP_03_err:创建文件夹失败!%d\n"); \

if (switch_bool == 4) printf(" FTP_04_err:上传文件失败!\n"); \

if (switch_bool == 5) printf(" FTP_05_err:关闭窗口句柄失败!\n"); \

return false;\

}

#define NULL_VERIFY(emStatus_null,switch_null) \

if (emStatus_null != NULL)\

{return true;}\

else{\

if (switch_null == 1) {printf(" FTP_01_err:打开通讯错误 Error:%d\n", GetLastError());}\

if (switch_null == 2) {printf(" FTP_02_err:建立连接错误 Error:%d\n", GetLastError());}\

return false;\

}

#include "stdafx.h"//没用

#include afxinet.h//MFC相关

#include "wininet.h"//调用FTP相关类

#include "shlwapi.h"//调用文件操作相关类

class FtpClass

{

public:

/*ini读取变量*/

static CString ftp_Ip;//目标ip

static CString ftp_Port;//目标端口

static CString ftp_User;//目标账户

static CString ftp_Password;//目标密码

static CString ftp_Fixed_Path;//目标固定路径

static CString ftp_Free_Path;//目标自己生成路径

/*全局变量*/

static BOOL pRes;

static HINTERNET hInternet;

static HINTERNET hConnect;

/*全局函数*/

static bool createConnection(); //创建一个连接

static bool createTable();

static bool ThreadInternetConnect(PVOID )

//打开目标ftp

static bool createFolder(CString temp1, CString temp2, CString temp3); //上传文件

static bool insert(CString temp, CString temp1); //出入数据

static bool createClose(); //断开连接

};

//ftpclass.cpp

#include "stdafx.h"

#include "ftpclass.h"

CString FtpClass::ftp_Ip = TEXT("192.168.3.104");

CString FtpClass::ftp_Port = TEXT("21");

CString FtpClass::ftp_User = TEXT("Administrator");

CString FtpClass::ftp_Password = TEXT("xinxin");

CString FtpClass::ftp_Fixed_Path = TEXT("1级固定目录/2级固定目录/3级固定目录");

CString FtpClass::ftp_Free_Path = TEXT("自动生成目录");

BOOL FtpClass::pRes = false;

HINTERNET FtpClass::hInternet = NULL;

HINTERNET FtpClass::hConnect = NULL;

//创建一个连接

bool FtpClass::createConnection() {

/*ftp_Ip = TEXT("Ini读取");

ftp_Port = TEXT("Ini读取");

ftp_User = TEXT("Ini读取");

ftp_Password = TEXT("Ini读取");

ftp_Fixed_Path = TEXT("Ini读取");*/

hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT,

NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE);

NULL_VERIFY(hInternet,1);

}

bool FtpClass::ThreadInternetConnect(PVOID param) {

// 打开http

hConnect = InternetConnect(hInternet, ftp_Ip, INTERNET_DEFAULT_FTP_PORT,//INTERNET_DEFAULT_FTP_PORT 第三个参数默认值21

ftp_User, ftp_Password, INTERNET_SERVICE_FTP,

INTERNET_FLAG_EXISTING_CONNECT || INTERNET_FLAG_PASSIVE, 0);

return 1;

}

//打开目标ftp

bool FtpClass::createTable()

{

/*hConnect = InternetConnect(hInternet, ftp_Ip, 25,//INTERNET_DEFAULT_FTP_PORT 第三个参数默认值21

ftp_User, ftp_Password, INTERNET_SERVICE_FTP,

INTERNET_FLAG_EXISTING_CONNECT || INTERNET_FLAG_PASSIVE, 0);

NULL_VERIFY(hConnect,2);*/

HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadInternetConnect, (LPVOID)NULL, 0, NULL);

//超时3秒,如果等待结果是超时

if (WaitForSingleObject(hThread, 3 * 1000) == WAIT_TIMEOUT) {

TerminateThread(hThread, 0);

CloseHandle(hThread);

NULL_VERIFY(hConnect, 2);

}

NULL_VERIFY(hConnect, 2);

}

//上传文件

bool FtpClass::createFolder(CString temp1, CString temp2, CString temp3)

{

/*新建文件件每次只能创建一级,多个需要分多次创建*/

pRes = false;

ftp_Free_Path = "";

ftp_Free_Path = ftp_Fixed_Path + "/" + temp1;

FtpCreateDirectory(hConnect, ftp_Free_Path);

ftp_Free_Path = ftp_Free_Path + "/" + temp2;

FtpCreateDirectory(hConnect, ftp_Free_Path);

ftp_Free_Path = ftp_Free_Path + "/" + temp3;

pRes = FtpCreateDirectory(hConnect, ftp_Free_Path);

BOOL_VERIFY(pRes,3);

}

//出入数据

bool FtpClass::insert(CString temp, CString temp1)

{

pRes = false;

ftp_Free_Path = ftp_Free_Path + "/" +temp1;

pRes = FtpPutFile(hConnect, temp,/*本机文件*/

ftp_Free_Path, /*TEXT("一级目录/二级目录/三级目录/a.txt"),*/

FTP_TRANSFER_TYPE_ASCII, 0);

BOOL_VERIFY(pRes,4);

}

//断开连接

bool FtpClass::createClose()

{

pRes = false;

if (InternetCloseHandle(hConnect))

pRes = InternetCloseHandle(hInternet);

BOOL_VERIFY(pRes,5);

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

关于ftp实现代码和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/15765.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载