⑴ 如何用VFP編寫FTP文件傳送器
VFP中執行FTP命令的一個簡單方法 命令雖然簡單,但功能卻很強大。可惜都是在ftp環境中,對一般用戶來說,讓他們使用ftp命令是不現實的。因此,在vfp中,用編程的方法,運行所需的ftp命令,就很管用了。下面是我用了很久的一段代碼,很實用,其功能是上傳一個文件並利用ftp文件目錄來判斷是否上傳成功。 至於要做其它事情,照著這個方法往下寫就可以了。
local cFileName,cDirName,cExpression
local strftpUserID ,strftpPassWord ,cUpFtpFileName ,ftpIp
local owsh
cFileName = fullpath(curdir())+'ftp.txt' && 生成一個包含ftp命令的文件
cDirName = fullpath(curdir())+'dir.txt' && 顯示ftp伺服器文件目錄的文件 if file(cDirName)
dele file (cDirName)
endif
&& strftpUserID 為ftp伺服器登錄用戶
cExpression = strftpUserID+chr(13)+chr(10) && 用戶名
STRTOFILE(cExpression, cFileName , .F.)
&& strftpPassWord 為ftp伺服器登錄密碼
cExpression = strftpPassWord+chr(13)+chr(10) && 密碼
STRTOFILE(cExpression, cFileName , .T.)
&& cUpFtpFileName 為要上傳的文件
cExpression = 'put '+cUpFtpFileName+'
'+JUSTFNAME(cUpFtpFileName)+chr(13)+chr(10) && 上傳文件
STRTOFILE(cExpression, cFileName , .T.)
cExpression = 'mdir '+JUSTFNAME(cUpFtpFileName)+'
'+cDirName+chr(13)+chr(10) && 返回器上傳的文件目錄
STRTOFILE(cExpression, cFileName , .T.)
cExpression = 'y'+chr(13)+chr(10)
STRTOFILE(cExpression, cFileName , .T.)
cExpression = 'bye'+chr(13)+chr(10)
STRTOFILE(cExpression, cFileName , .T.)
&& ftpIp為ftp伺服器IP地址
owsh=createobject("wscript.shell")
if left(os(),10) == 'Windows NT' OR os()='Windows 5.00'
owsh.run("cmd /c ftp -s:"+cFileName +" "+ftpIp,0,.T.) &&0 為運行時窗口類型,隱藏,.T.為程序執行完後才會停止
⑵ C#編寫FTP伺服器
FTP伺服器,不需要用C#寫代碼,它就像個安裝軟體一樣,安裝好了,設置下要作為Ftp服務的文件夾,然後給這個文件夾添加些用戶能訪問該文件夾,客戶端只要知道伺服器的IP和你設置的用戶名密碼就是訪問ftp文件夾了。
ftp功能一般都不需要資料庫,如果你存儲的僅僅是文件的話。
⑶ VB與FTP編程
建議樓主用winsock連接FTP伺服器,發送FTP命令來實現交互,另外說明下,目錄的獲取與文件的傳輸是另開埠進行的,以下是命令表
ftp協議命令字(轉)
命令 描述
ABOR 中斷數據連接程序
ACCT <account> 系統特權帳號
ALLO <bytes> 為伺服器上的文件存儲器分配位元組
APPE <filename> 添加文件到伺服器同名文件
CDUP <dir path> 改變伺服器上的父目錄
CWD <dir path> 改變伺服器上的工作目錄
DELE <filename> 刪除伺服器上的指定文件
HELP <command> 返回指定命令信息
LIST <name> 如果是文件名列出文件信息,如果是目錄則列出文件列表
MODE <mode> 傳輸模式(S=流模式,B=塊模式,C=壓縮模式)
MKD <directory> 在伺服器上建立指定目錄
NLST <directory> 列出指定目錄內容
NOOP 無動作,除了來自伺服器上的承認
PASS <password> 系統登錄密碼
PASV 請求伺服器等待數據連接
PORT <address> IP 地址和兩位元組的埠 ID
PWD 顯示當前工作目錄
QUIT 從 FTP 伺服器上退出登錄
REIN 重新初始化登錄狀態連接
REST <offset> 由特定偏移量重啟文件傳遞
RETR <filename> 從伺服器上找回(復制)文件
RMD <directory> 在伺服器上刪除指定目錄
RNFR <old path> 對舊路徑重命名
RNTO <new path> 對新路徑重命名
SITE <params> 由伺服器提供的站點特殊參數
SMNT <pathname> 掛載指定文件結構
STAT <directory> 在當前程序或目錄上返回信息
STOR <filename> 儲存(復制)文件到伺服器上
STOU <filename> 儲存文件到伺服器名稱上
STRU <type> 數據結構(F=文件,R=記錄,P=頁面)
SYST 返回伺服器使用的操作系統
TYPE <data type> 數據類型(A=ASCII,E=EBCDIC,I=binary)
USER <username>> 系統登錄的用戶名
標准 FTP 信息如下:
響應代碼 解釋說明
110 新文件指示器上的重啟標記
120 伺服器准備就緒的時間(分鍾數)
125 打開數據連接,開始傳輸
150 打開連接
200 成功
202 命令沒有執行
211 系統狀態回復
212 目錄狀態回復
213 文件狀態回復
214 幫助信息回復
215 系統類型回復
220 服務就緒
221 退出網路
225 打開數據連接
226 結束數據連接
227 進入被動模式(IP 地址、ID 埠)
230 登錄網際網路
250 文件行為完成
257 路徑名建立
331 要求密碼
332 要求帳號
350 文件行為暫停
421 服務關閉
425 無法打開數據連接
426 結束連接
450 文件不可用
451 遇到本地錯誤
452 磁碟空間不足
500 無效命令
501 錯誤參數
502 命令沒有執行
503 錯誤指令序列
504 無效命令參數
530 未登錄網路
532 存儲文件需要帳號
550 文件不可用
551 不知道的頁類型
552 超過存儲分配
553 文件名不允許
⑷ 求用java寫一個ftp伺服器客戶端程序。
import java.io.*;
import java.net.*;public class ftpServer extends Thread{ public static void main(String args[]){
String initDir;
initDir = "D:/Ftp";
ServerSocket server;
Socket socket;
String s;
String user;
String password;
user = "root";
password = "123456";
try{
System.out.println("MYFTP伺服器啟動....");
System.out.println("正在等待連接....");
//監聽21號埠
server = new ServerSocket(21);
socket = server.accept();
System.out.println("連接成功");
System.out.println("**********************************");
System.out.println("");
InputStream in =socket.getInputStream();
OutputStream out = socket.getOutputStream();
DataInputStream din = new DataInputStream(in);
DataOutputStream dout=new DataOutputStream(out);
System.out.println("請等待驗證客戶信息....");
while(true){
s = din.readUTF();
if(s.trim().equals("LOGIN "+user)){
s = "請輸入密碼:";
dout.writeUTF(s);
s = din.readUTF();
if(s.trim().equals(password)){
s = "連接成功。";
dout.writeUTF(s);
break;
}
else{s ="密碼錯誤,請重新輸入用戶名:";<br> dout.writeUTF(s);<br> <br> }
}
else{
s = "您輸入的命令不正確或此用戶不存在,請重新輸入:";
dout.writeUTF(s);
}
}
System.out.println("驗證客戶信息完畢...."); while(true){
System.out.println("");
System.out.println("");
s = din.readUTF();
if(s.trim().equals("DIR")){
String output = "";
File file = new File(initDir);
String[] dirStructure = new String[10];
dirStructure= file.list();
for(int i=0;i<dirStructure.length;i++){
output +=dirStructure[i]+"\n";
}
s=output;
dout.writeUTF(s);
}
else if(s.startsWith("GET")){
s = s.substring(3);
s = s.trim();
File file = new File(initDir);
String[] dirStructure = new String[10];
dirStructure= file.list();
String e= s;
int i=0;
s ="不存在";
while(true){
if(e.equals(dirStructure[i])){
s="存在";
dout.writeUTF(s);
RandomAccessFile outFile = new RandomAccessFile(initDir+"/"+e,"r");
byte byteBuffer[]= new byte[1024];
int amount;
while((amount = outFile.read(byteBuffer)) != -1){
dout.write(byteBuffer, 0, amount);break;
}break;
}
else if(i<dirStructure.length-1){
i++;
}
else{
dout.writeUTF(s);
break;
}
}
}
else if(s.startsWith("PUT")){
s = s.substring(3);
s = s.trim();
RandomAccessFile inFile = new RandomAccessFile(initDir+"/"+s,"rw");
byte byteBuffer[] = new byte[1024];
int amount;
while((amount =din.read(byteBuffer) )!= -1){
inFile.write(byteBuffer, 0, amount);break;
}
}
else if(s.trim().equals("BYE"))break;
else{
s = "您輸入的命令不正確或此用戶不存在,請重新輸入:";
dout.writeUTF(s);
}
}
din.close();
dout.close();
in.close();
out.close();
socket.close();
}
catch(Exception e){
System.out.println("MYFTP關閉!"+e);
}
}}
⑸ 如何用java實現ftp客戶端程序
FTP 的主要操作都是基於各種命令基礎之上的。常用的命令有: · 設置傳輸模式,它包括ASCⅡ(文本) 和BINARY 二進制模式; · 目錄操作,改變或顯示遠程計算機的當前目錄(cd、dir/ls 命令); · 連接操作,open命令用於建立同遠程計算機的連接;close命令用於關閉連接; · 發送操作,put命令用於傳送文件到遠程計算機;mput 命令用於傳送多個文件到遠程計算機; · 獲取操作,get命令用於接收一個文件;mget命令用於接收多個文件。 編程思路 根據FTP 的工作原理,在主函數中建立一個伺服器套接字埠,等待客戶端請求,一旦客戶端請求被接受,伺服器程序就建立一個伺服器分線程,處理客戶端的命令。如果客戶端需要和伺服器端進行文件的傳輸,則建立一個新的套接字連接來完成文件的操作。 編程技巧說明 http://www.jacken.com.cn/Programming/Java/2008-10-24/Java-.html
⑹ 怎麼做ftp伺服器
架設一台FTP伺服器其實很簡單。首先,要保證你的機器能上網,而且有不低於ADSL 512Kbps的網路速度。其次,硬體性能要能滿足你的需要。最後,需要安裝FTP伺服器端的軟體,這類軟體很多,可以使用微軟的IIS(Internet Information Server 網際網路信息服務系統),也可以使用專業軟體。不同的軟體提供的功能不同,適應的需求和操作系統也不同。一般來說,系統最低要求如下:
CPU:PⅢ 450MHz以上
內存:256MB SDRAM以上
帶寬:ADSL 512Kbps以上
至於操作系統,Windows 98/Me/NT/2000/XP均可,如果對伺服器的性能和安全性要求很低,可以採用Windows 98和Windows Me。本文中,如無特殊說明,均以Windows XP專業版為操作系統,其餘操作系統下FTP伺服器的架設及設置均大同小異。
一、用IIS架設
如果只是想建個小型的同時在線用戶數不超過10個的FTP伺服器,且不會同時進行大流量的數據傳輸,可以用IIS 5.0作為伺服器軟體來架設(IIS只適用於Windows NT/2000/XP操作系統)。
1.安裝
Windows XP默認安裝時不安裝IIS組件,需要手工添加安裝。進入控制面板,找到「添加/刪除程序」,打開後選擇「添加/刪除Windows組件」,在彈出的「Windows組件向導」窗口中,將「Internet信息服務(IIS)」項選中。在該選項前的「√」背景色是灰色的,這是因為Windows XP默認並不安裝FTP服務組件。再點擊右下角的「詳細信息」,在彈出的「Internet信息服務(IIS)」窗口中,找到「文件傳輸協議(FTP)服務」,選中後確定即可。
安裝完後需要重啟。Windows NT/2000和Windows XP的安裝方法相同。
2.設置
電腦重啟後,FTP伺服器就開始運行了,但還要進行一些設置。點擊「開始→所有程序→管理工具→Internet信息服務」,進入「Internet信息服務」窗口後,找到「默認FTP站點」,右擊滑鼠,在彈出的右鍵菜單中選擇「屬性」。在「屬性」中,我們可以設置FTP伺服器的名稱、IP、埠、訪問賬戶、FTP目錄位置、用戶進入FTP時接收到的消息等。
1)FTP站點基本信息
進入「FTP站點」選項卡,其中的「描述」選項為該FTP站點的名稱,用來稱呼你的伺服器,可以隨意填,比如「我的小站」;「IP地址」為伺服器的IP,系統默認為「
⑺ java中怎麼實現ftp伺服器
我知道apache有個commons net包,其中的FTPClient類可以實現客戶端和服務之間的文件傳輸,但是我如果使用這種方式的話,就得將一台伺服器上的文件傳到我本地,再將這個文件傳到另一台伺服器上,感覺這中間多了一步操作;
⑻ 網路編程案例ftp客戶端怎麼連接伺服器
示例:創建一個http get請求,序列化後的請求應該通過寫入流(write stream)發送。
CFStringRef requestHeader = CFSTR("Connection");
CFStringRef requestHeaderValue = CFSTR("close");
CFStringRef requestBody = CFSTR("");
CFStringRef url = CFSTR("http://www..com/");
CFStringRef requestMethod = CFSTR("GET");
CFURLRef requestURL = CFURLCreateWithString(kCFAllocatorDefault, url, NULL);
CFHTTPMessageRef request = CFHTTPMessageCreateRequest(kCFAllocatorDefault, requestMethod, requestURL, kCFHTTPVersion1_1);
CFHTTPMessageSetBody(request, requestBody);
(request, requestHeader, requestHeaderValue);
CFDataRef serializedRequest = (request);
創建HTTP相應的步驟與創建請求的方法差不多,不同之處是用CFHTTPMessageCreateResponse函數代替CFHTTPMessageCreateRequest。
可以使用一個CFReadStream對象來序列化並發送CFHTTP請求。當使用CFReadStream對象時,打開讀取流的同時消息會被序列化並發送,這樣可以方便地獲取響應。如下:
CFHTTPMessageRef request = CFHTTPMessageCreateRequest(kCFAllocatorDefault, requestMethod, requestURL, kCFHTTPVersion1_1);
CFHTTPMessageSetBody(request, requestBody);
(request, requestHeader, requestHeaderValue);
CFReadStreamRef readStream = (kCFAllocatorDefault, request);
CFReadStreamOpen(readStream);
調用CFReadStreamCopyProperty 可以從讀取流獲取響應消息,代碼如下:
CFHTTPMessageRef response = CFReadStreamCopyProperty(readStream, );
使用函數獲得完整的狀態行,如下:
CFStringRef statusLine = (response);
或者,使用函數獲取狀態碼,如下:
UInt32 errCode = (response);
為了獲取返回的數據,可以使用CFReadStreamSetClient方法設置回調函數,將readStream加到run loop中。在回調函數將每次讀取的數據存起來(比如,有一個NSMutableData類型的變數data),讀完後處理數據,代碼如下:
if( == eventType)
{
UInt8 buff[255];
int length = CFReadStreamRead(stream, buff, 254);
[data appendBytes:buff length:length];
if(kCFStreamEventEndEncountered == eventType)
{
//讀取已完成,處理讀取的數據
}
}
如果接收數據是中文字元串,注意在創建NSString時選擇編碼,比如UTF8或GB2312編碼,如下所示:
NSString *string = [[NSString alloc] initWithData:data encoding:0x80000632];//GB2312編碼
當使用創建讀取流時,流的重定向默認是被禁止的。如果請求連接被重定向,會導致一個錯誤,它的狀態碼為300~307。如果收到一個重定向錯誤,需要關閉這個流,然後重新創建一個流,啟用重定向並打開流。如下:
CFReadStreamRef readStream = (kCFAllocatorDefault, request);
if(CFReadStreamSetProperty(readStream, , kCFBooleanTrue) == false)
{
//出錯處理
}
CFReadStreamOpen(myReadStream);
2.CFFTP
CFFTP也使用CFReadStream來傳送FTP數據。使用CFReadStreamCreateWithFTPURL方法來創建FTP請求,這樣會同時創建一個CFReadStreamRef對象來讀取FTP伺服器發送的數據,代碼如下:
CFStringRef url = CFSTR("ftp://ftp.example.com/file.txt");
CFURLRef requestURL = CFURLCreateWithString(kCFAllocatorDefault, url, NULL);
CFReadStreamRef readStream = CFReadStreamCreateWithFTPURL(kCFAllocatorDefault, requestURL);
下一步,使用CFReadStreamSetClient方法設置回調函數來讀取數據,然後把readStream加到程序的run loop中。
如果FTP需要使用用戶名和密碼認證,通過CFReadStreamSetProperty方法設置kCFStreamPropertyFTPUserName和kCFStreamPropertyFTPPassword屬性。
要將文件下載到本地,可以使用CFWriteStreamCreateWithFile方法創建一個指向本地文件的寫入流,將接收到的數據寫入。
上傳文件和下載文件差不多,只不過把讀取流和寫入流反過來用,使用CFWriteStreamCreateWithFTPURL方法創建寫入流,使用CFReadStreamCreateWithFile創建讀取流。
創建遠程目錄的方法與上傳文件類似,只不過將CFURL對象設置一個路徑而不是文件。
獲取目錄列表的方法與下載文件類似,數據讀取到緩存後使用,方法對讀取進行解析。
3.NSURLConnection
CFNetwork是比較底層的介面,雖然用起來比較靈活,但並不好用。多數程序僅僅需要創建簡單的請求來獲取互聯網上的一個文件,那麼使用NSURLConnection要更加方便,因為不用跟套接字、流還有回調函數打交道,取而代之的是更熟悉的委託機制。
創建一個NSURL對象:
NSNRL *url = [NSURL URLWithString:@"http://www..com/"];
NSURL對象是用來創建NSURLRequest對象的,如下:
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy::60.0];
可選的緩存策略有以下幾種。
(1):使用相關協議默認緩存策略。
(2): 無論本地緩存是什麼,請求都要重新載入數據。
(3):不僅要忽略本地緩存,在協議允許的情況下也要忽略遠程代理或中間件的緩存。
(4):優先使用緩存數據,緩存不存在時再去載入請求。
(5):只載入緩存數據,緩存中不存在時也不請求,可理解為離線模式。
(6): 緩存中的數據沒有過期時才載入緩存中的數據,否則請求數據並刷新緩存。
創建完NSURLRequest對象後就可以創建NSURLConnection對象了,如下:
NSURLConnection *connection = [[NSRULConnection alloc] initWithRequest:request delegate:self];
這個是非同步調用,NSURLConnection會在後台發送請求,通過設置委託參數,有數據時會收到通知。由一些委託方法來處理連接是過程中的不同事件。
當服務主機有響應將要開始發送數據時,didReceiveResponse:方法會被調用。這里可以做一些初始化的工作,比如有一個NSMutableData類型的data對象來存儲數據,在這里可以把對象長度設為0,如下所示
-(void) connection:(NSURLConnection *)connection didReceiveRespose:(NSURLResonse *)response
{
[data setLength:0];
}
當接收到數據時,didReceiveData:方法會被調用。這里可以把數據加到NSMutableData對象的後面,如下:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)incomingData
{
[data appendData:incomingData];
}
當數據載入完成時會調用connecitionDidFinshLoading:方法,處理傳入的數據。這里以字元串處理為例,示例應用中傳入的可能是圖片或其他任何類型的對象。
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(string);
[data release];
}
連接或傳送數據失敗時,didFailWithError方法會被調用,如下:
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"query failed with error:%@", [error localizedDescription]);
[data release];
}
⑼ C++編寫ftp伺服器時,Ftp伺服器與客服端建立連接之後,怎麼協商數據傳輸埠(程序實現)
當用accept函數與客戶端請求建立連接之後,accept函數將自動新建一個套接字(假設為s2),這個新建的套接字和客戶端相連接並收發數據,而原來在監聽狀態的套接字(假設為s1)仍然處於監聽狀態,以便接受下一個連接請求。在accept函數返回s2之前,bind、listen、accept都是針對s1進行的。而accept函數返回s2之後的send和recv都是針對s2.
至於代碼,想深究的話,建議去看看"tcp/ip詳解"第二卷
⑽ 用C語言寫一個FTP的客戶端程序,需要了解哪些知識
一、需要的知識點:
1、SOCKET技術,網路編程的基本功能
2、FTP
3、如果需要自己寫,可能需要熟悉各個網路框架
二、編寫FTP所需要掌握的框架
1、wininet
2、libcurl