當前位置:首頁 » 文件管理 » c實現ftp上傳文件

c實現ftp上傳文件

發布時間: 2022-07-16 23:21:35

A. unix下用c語言實現一個基於ftp的文件傳輸的client

貌似 Linux 下可以直接使用 ftp 命令
Red Hat 9.0自帶VSFTP,你配置好後,別人可
以直接通過終端上傳下載文件,至於怎麼用C
語言實現,不好意思,哥們兒不會。
用C的system函數調用 ftp 命令
unix下面也有ftp啊
int ftpcmd(int sockftp,char *fmt,...) //cmd
{
va_list vp;
int err,len;
int i,j,n,p;

if (ftpio == NULL)
{
ftpio = fdopen(sockftp,"r"); //socket->file pointer
if (ftpio == NULL)
return -1;
}
if (fmt)
{
va_start(vp,fmt);
len = vsprintf(ftp_buf,fmt,vp);
ftp_buf[len++] = '\r';
ftp_buf[len++]='\n';
write(sockftp,ftp_buf,len); //buf->socket

}

n=read(sockftp,ftp_buffer,sizeof(ftp_buffer));
printf("the buff is %s\n",ftp_buffer);
if(fmt=="PASV") //被動模式下提取需要連接服務端的埠
{
ftp_buffer[n-3]='\0';
str1=ftp_buffer+39;
str2=strchr(str1,',');
i=atoi(str2+1);
n=0;
while(str1[n]!=',')
{
str3[n]=str1[n];
n++;
}
j=atoi(str3);
p=j*256+i;
return p;

}
return 1;
}

int ftp()
{
char *host="ftp.tust.e.cn";
char *user="ejia";
char *pass="ejia2094ejia";
char *filename="net";
char *savefile="net";
int sockftp = -1,sockdata = -1,sockxfer = -1;
struct sockaddr_in addr;
unsigned long hostip;
int len,tmp,err,err1;
int retval = -1;
int savefd;
char *del=":";
char *port;
struct hostent *he;
hostip = inet_addr(host); //ip

sockftp = socket(AF_INET,SOCK_STREAM,0); //control socket
if (sockftp == -1)
goto out;

addr.sin_family = PF_INET;
addr.sin_port = htons(21);
addr.sin_addr.s_addr = hostip;
if (connect(sockftp,(struct sockaddr *)&addr,sizeof(addr)) == -1) //wait for connect
goto out;

err = ftpcmd(sockftp,NULL); //connect ftp server
err = ftpcmd(sockftp,"USER %s",user);
err = ftpcmd(sockftp,"PASS %s",pass);
err = ftpcmd(sockftp,"TYPE I");
err1 = ftpcmd(sockftp,"PASV");

tmp = sizeof(addr);
sockdata = socket(AF_INET,SOCK_STREAM,0); //data socket
if (sockdata == -1)
goto out;
memset(&addr,0,tmp);
addr.sin_family = AF_INET;
addr.sin_port = htons(err1);
addr.sin_addr.s_addr = inet_addr(host);;
sockxfer = connect(sockdata,&addr,tmp);
if (sockxfer == -1)
goto out;
err=ftpcmd(sockftp,"RETR %s",filename);
/*savefd = open(savefile,O_RDWR | O_CREAT); //create file
if (savefd == -1)
goto out; */

len=read(sockdata,ftp_buf,sizeof(ftp_buf));
client_ip=strtok(ftp_buf,del);
port=strtok(NULL,del);
client_port=atoi(port);
printf("the cilentip is %s,the port is %d\n",client_ip,client_port);

/*write(savefd,ftp_buf,len);
close(savefd);*/

out:
close(sockxfer);
close(sockdata);
close(sockftp);
}
注意一下四樓沒包含庫文件
<sys/un.h>
<netinet/in.h>
<sys/socket.h>
<netdb.h>
<arpa/inet.h>
當然還有<unistd.h>
介紹本書《高級UNIX編程》外文翻譯的,
裡面講得很詳細。

B. 怎麼用cftpconnection類編寫向ftp server上傳文件

為了與FTP Internet伺服器通訊,必須先創建一個CInternetSession實例,然後創建CFtpConnection對象。創建CFtpConnection對象不採用直接方式,而是調用CInternetSession::GetFtpConnertion來創建並返回一個指向它的指針。

CFtpConnection類的成員

構造函數 CFtpConnection 構造一個CFtpConnection對象

操作 SetCurrentDirectory 設置當前FTP目錄

GetCurrentDirectory 獲取此次連接的當前目錄

GetCurrentDirectoryAsURL 獲取作為URL的此次連接的當前目錄

RemoveDirectory 從伺服器移去指定目錄

CreateDirectory 在伺服器上構造一個目錄

Rename 將伺服器上的文件改名

Remove 從伺服器上移去一個文件

PutFile 將一個文件放到伺服器上

GetFile 從連接的伺服器上獲取一個文件

OpenFile 在連接的伺服器上打開一個文件

Close 關閉與伺服器的連接

實例一:上傳文件
CString strAppName = AfxGetAppName();
CInternetSession* pSession = new CInternetSession(strAppName);
CFtpConnection* pConn = pSession->GetFtpConnection("
10.46.1.232","Anonymous","",21);
pConn->SetCurrentDirectory("test");
CString strLocfile,strRemotefile;
strLocfile="C:\\cmd.txt";
strRemotefile="cmd.txt";
pConn->PutFile(strLocfile,strRemotefile,FTP_TRANSFER_TYPE_ASCII);
pConn->Close();
return 0;
實例二:Ftp的打開文件操作函數:OpenFile

C. 如何用c語言實現http ftp的上傳功能

hehe ..這是因為FTP跟HTTP根本不是同一種類型伺服器。FTP專門是用來下載上傳用的,可以算做一個網路硬碟吧..而HTTP伺服器一般是WEB伺服器..性質完全不一樣,就好象你家裡的廚房和廁所一樣,功能完全不一樣嘛你總不可能在廁所想做飯,在廚房想上廁所對不對,沒有任何辦法..你只能按最直接的地址下載

如果幫助到您,請記得採納為滿意答案哈,謝謝!祝您生活愉快! vae.la

D. 如何在unix下,c語言中實現ftp文件傳輸

nt FtpInit(char* Host,char* Account,char* Passwd)
{
short shPortNumber;
long lAddr;
char RecvBuf[1024];
char SendBuf[1024];
int RecvLen,SendLen;

shPortNumber=htons(21);
lAddr=inet_addr(Host);
memset(HostName,0,16);
memcpy(HostName,Host,strlen(Host));
hClient=socket(AF_INET,SOCK_STREAM,0);
if (hClient<0)
{
return -1;
}
if(setsockopt(hClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&rcvtime,sizeof(int)))
{
close(hClient);
return -1;
}

if(setsockopt(hClient,SOL_SOCKET,SO_KEEPALIVE,(char *)&keepalive,sizeof(int)))
{
close(hClient);
return -1;
}
SockAddr.sin_family = AF_INET;
SockAddr.sin_addr.s_addr = lAddr;
SockAddr.sin_port = shPortNumber;

if (connect(hClient,(const struct sockaddr *)&SockAddr,sizeof(SockAddr))<0)
{
close(hClient);
return -1;
}

memset(RecvBuf,0,1024);
if((RecvLen=FtpMatchReceive(hClient,RecvBuf, "220 ",1024))<=0)
{
close(hClient);
return -1;
}
if(SendLen=GetFtpSendBuf("USER",Account,SendBuf,1024)<=0)
{
close(hClient);
return -1 ;
}
if(SendFTPCommand(hClient,SendBuf)!=331)
{
close(hClient);
return -1;
}
if(SendLen=GetFtpSendBuf("PASS",Passwd,SendBuf,1024)<=0)
{
close(hClient);
return -1 ;
}
if(SendFTPCommand(hClient,SendBuf)!=230)
{
close(hClient);
return -1;
}

}
int FtpGetFile(char * FileName)
{
int hListenSocket;
int hDataSocket;
int RetWriteFile;
int ReturnCode;
char RemoteFileName[256];
char RemoteFile[256];
char ExecCommand[256];
char * pcSubDir;

memset(RemoteFileName,0,256);
memset(RemoteFile,0,256);
memset(ExecCommand,0,256);

strcpy(RemoteFileName,FileName);
memcpy(ExecCommand,"CWD ",4);

pcSubDir=strrchr(RemoteFileName,'\\');
if (pcSubDir !=NULL)
{
strncat(ExecCommand,RemoteFileName,RemoteFileName-pcSubDir);
if(SendFTPCommand(hClient,ExecCommand)!=250)
{
close(hClient);
return -1;
}
strcpy(RemoteFile,pcSubDir);
}
else
{
strcpy(RemoteFile,RemoteFileName);
}

if((hListenSocket=CreatListenSocket(hClient))<0)
{
close(hClient);
return -1;
}
if(RequestDataConnection(hClient,hListenSocket)<0)
{
close(hClient);
return -1;
}
memset( ExecCommand,0,256);
memcpy( ExecCommand,"RETR ",5);
strcat( ExecCommand,RemoteFile);
printf("The FileName=%s\n",RemoteFile);
strcat( ExecCommand,"\r\n");

ReturnCode=SendFTPCommand(hClient,ExecCommand);
if(ReturnCode!=150)
{
close(hClient);
return -1;
}
if((hDataSocket=AcceptDataConnection(hListenSocket))<0)
{
close(hClient);
return -1;
}
if((RetWriteFile=WriteFile(hDataSocket,RemoteFile))<0)
{
close(hDataSocket);
close(hClient);
return -1;
}

}

E. ftp使用文件傳輸協議把文件上傳怎麼做

如下:
1、如果是FPT上傳軟體,直接傳輸,復制就可以了。
2、如果是通過DOS命令,可使用以下方法。
@ECHO OFF
path=a:\;c:\
ftp -f model.txt 10.10.0.55
3、用此方法,就可以將指定的文件,上傳到伺服器。

F. 想做一個批處理 將指定文件用FTP上傳

時間晚了好久,不知道到還有用沒,希望有用的可以拿來參考

目的監控路徑下面文件,上傳到指定FTP。上傳完畢後文件備份。

方法個人運用兩個bat第一個監控,第二個FTP上傳

1.監控。放到你要監控的文件夾路徑下面建立start.bat 下面是我放的內容。

@echo off

:memu

for /f "delims=" %%a in ('dir /a-d/b *.zip') do (

if not [%%a]==[] (

echo %time%發現:%%a

)

)

start "" Q:BCPbackupftpceshiftpuploud.bat

ping 127.0.1 -n 60 >nul

goto memu

在段中,你要監控的文件類型就是*.zip。可以改成你需要的比如*.jpg等

刪除臨時文件,退出

然後1在監控,有文件後啟動FTP上傳完成後退出

這里我沒有找到決絕辦法的是FTP上傳完的文件如何改名。有知道的大神告訴一下別太難

G. 關於C語言FTP伺服器上傳數據實現方法

FTP伺服器是現成的 ? 那你就是要寫客服端咯。 看FTP協議跟socket套接字。

H. 你好,這個你解決了嗎C語言如何用FtpPutFile()函數上傳文件到Ftp伺服器!下載用FtpGetFile()可以!

先後使用InternetOpen和InternetConnect打開連接。使用CreateFile函數打開本地文件。使用FtpOpenFile函數打開遠程文件。分別使用InternetReadFile和ReadFile函數讀取
FTP
或本地文件。分別使用InternetWriteFile和WriteFile函數寫入
FTP
或本地文件。使用CloseHandle函數關閉本地文件句柄。使用InternetCloseHandle函數關閉
FTP
文件句柄。

I. c# 我想通過FTP傳文件,請問如何實現!

這個問題吧!ftp命令不是在cmd中執行的吧!因為你執行ftp又跳到別的界面上去了!所有我給你說一個解決方案哦!
就是你程序裡面做一個配置項.配置文件,xml都可以!
然後要求先登錄,再上傳!登錄成功後就把帳號和密碼寫入一個批處理文件(.cmd;.bat)!選擇完上傳文件後修改這個文件!要執行的時候直接:System.Diagnostics.Process.Start("c:\up.cmd");
試試!好運!

J. C語言如何用FtpPutFile()函數上傳文件到Ftp伺服器!下載用FtpGetFile()可以!

  1. 先後使用InternetOpen和InternetConnect打開連接。
  2. 使用CreateFile函數打開本地文件。
  3. 使用FtpOpenFile函數打開遠程文件。
  4. 分別使用InternetReadFile和ReadFile函數讀取 FTP 或本地文件。
  5. 分別使用InternetWriteFile和WriteFile函數寫入 FTP 或本地文件。
  6. 使用CloseHandle函數關閉本地文件句柄。
  7. 使用InternetCloseHandle函數關閉 FTP 文件句柄。

熱點內容
教師資格面試試講腳本 發布:2025-01-22 22:51:37 瀏覽:683
python中reduce 發布:2025-01-22 22:50:42 瀏覽:272
網路拓撲演算法 發布:2025-01-22 22:47:51 瀏覽:531
wifi密碼怎麼看電腦 發布:2025-01-22 22:37:44 瀏覽:166
termux中的編譯器 發布:2025-01-22 22:36:56 瀏覽:408
電腦做伺服器速度慢 發布:2025-01-22 22:28:20 瀏覽:463
奇跡製作腳本 發布:2025-01-22 22:23:11 瀏覽:603
伺服器授權碼是什麼意思 發布:2025-01-22 22:18:54 瀏覽:353
電腦顯示伺服器找不到列印機無法連接 發布:2025-01-22 22:18:40 瀏覽:717
300元乒乓球套拍如何配置 發布:2025-01-22 22:15:41 瀏覽:998