FTP文件传输客户端程序报告Word文档下载推荐.docx

上传人:b****5 文档编号:18311896 上传时间:2022-12-15 格式:DOCX 页数:8 大小:44.50KB
下载 相关 举报
FTP文件传输客户端程序报告Word文档下载推荐.docx_第1页
第1页 / 共8页
FTP文件传输客户端程序报告Word文档下载推荐.docx_第2页
第2页 / 共8页
FTP文件传输客户端程序报告Word文档下载推荐.docx_第3页
第3页 / 共8页
FTP文件传输客户端程序报告Word文档下载推荐.docx_第4页
第4页 / 共8页
FTP文件传输客户端程序报告Word文档下载推荐.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

FTP文件传输客户端程序报告Word文档下载推荐.docx

《FTP文件传输客户端程序报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《FTP文件传输客户端程序报告Word文档下载推荐.docx(8页珍藏版)》请在冰豆网上搜索。

FTP文件传输客户端程序报告Word文档下载推荐.docx

計算PortY。

File_transfer發送PASV命令之後調用。

Send_file:

打開傳送資料。

函數調用關係如下圖:

 

   程式代碼層次分明,易於閱讀和修改。

b.執行時僅需輸入需要傳送的資料名稱。

主函數調用Filename,提示輸入資料名稱,根據資料名稱設置STOR命令(即

在資料名稱之前加“STOR”,之後加“\r\n”)。

然後主函數建立指令連接,調用File_transfer進行Client端的主要操作。

File_transfer中調用Command直接發送命令,無須輸入命令字符串。

程序執行簡單,易於操作。

c. NameResolution

  程式調用gethostbyname獲取伺服器IP地址。

根據IP地址去連接伺

服器。

相關代碼如下:

  structhostent*server;

  

  server=gethostbyname("

cramer.ee.nthu.edu.tw"

);

//獲取IP。

  servaddr1.sin_addr=*((structin_addr*)server->

h_addr);

//將IP連接到socket

  servaddr2.sin_addr=*((structin_addr*)server->

 有進行NameResolution。

3.Sourcecode

#include<

string.h>

math.h>

stdio.h>

stdlib.h>

winsock2.h>

ws2tcpip.h>

#defineMAXLEN1024

//PS:

執行時僅需輸入要傳送的資料名稱即可,程序會自動發送命令并輸出來自服務器的回信。

//這些變量在多個函數中需要使用,因此定義在程序開頭。

charRcvBuf[MAXLEN];

intn;

SOCKETa,b;

//a用於建立連線,b用於傳送資料。

SOCKADDR_INservaddr1,servaddr2;

charname[30],stor[30]="

STOR"

;

//command用於向FTP服務器發送命令,然後接收回信并打印出來。

intcommand(char*message)

{

send(a,message,strlen(message),0);

n=recv(a,RcvBuf,MAXLEN,0);

RcvBuf[n]='

\0'

//在接收緩衝區的末尾加字符串結束符號。

printf("

%s\n\n"

RcvBuf);

}

//發送PSAV命令之後,port將收到的信息中的porty轉換為整數。

如接收“227EnteringPassiveMode(140,114,26,104,68,245)”,則p1=245,p2=68。

intport()

{

inti=0,j=0,k=0,p,p1=0,p2=0;

while(RcvBuf[i]!

='

)'

)i++;

//用while找到右括號,然後依次求p1、p2,從右往左進行計算。

for(i=i-1;

j<

1;

i--)//計算p1

if(RcvBuf[i]=='

'

)j++;

else

p=RcvBuf[i]-'

0'

//將字符轉化為數字.

p1=p1+pow(10,k)*p;

k++;

}

k=0;

for(;

2;

i--)//計算p2

p2=p2+pow(10,k)*p;

returnp=p1+p2*256;

//傳送資料的連接建立之後,用於發送資料。

intsend_file()

charSendBuf[MAXLEN];

FILE*p;

intFileSize;

p=fopen(name,"

rb"

//打開資料。

fseek(p,0L,SEEK_END);

FileSize=ftell(p);

//用fseek和ftell計算資料大小。

fread(SendBuf,FileSize,1,p);

//將要發送的資料寫入發送緩衝區。

fclose(p);

send(b,SendBuf,FileSize,0);

closesocket(b);

//發送文件之後應及時關閉資料連接,不然收不到“226...."

return0;

}

//主函數調用此函數進行Client端的主要操作。

intfile_transfer()

intport_y,i=0;

while(i<

2)/while/用於接收歡迎信息。

i++;

}

command("

USEREE3650\r\n"

//命令不採用鍵盤輸入,調用command函數發送命令和輸出收到的信息。

PASS2012EE3650\r\n"

MKDx1002127\r\n"

CWD/X1002127\r\n"

PASV\r\n"

port_y=port();

//調用port函數計算收到的porty。

TYPEI\r\n"

servaddr2.sin_port=htons(port_y);

connect(b,(SOCKADDR*)&

servaddr2,sizeof(servaddr2));

//建立資料連接。

command(stor);

send_file();

//調用send_file發送文件。

//輸入要傳送的資料名稱並且將STOR命令設置好。

intfilename()

Pleaseinputthenameofthefileyouwanttotransfer:

\n"

scanf("

%s"

name);

strcat(stor,name);

//設置STOR命令。

strcat(stor,"

\r\n"

intmain()

WSADATAwsaData;

Struchostent*server;

//此結構體用於nameresolution

WSAStartup(MAKEWORD(2,2),&

wsaData);

server=gethostbyname("

//調用gethostbyname進行nameresolution。

a=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

b=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

servaddr1.sin_family=AF_INET;

servaddr1.sin_port=htons(21);

servaddr1.sin_addr=*((structin_addr*)server->

//將gethostbyname返回的ip信息連接到socket.

servaddr2.sin_family=AF_INET;

servaddr2.sin_addr=*((structin_addr*)server->

filename();

//用於輸入名稱,并設置STOR命令。

connect(a,(SOCKADDR*)&

servaddr1,sizeof(servaddr1));

file_transfer();

//調用file_transfer完成client端的操作。

closesocket(a);

WSACleanup();

system("

pause"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1