1、計算Port Y。File_transfer發送PASV命令之後調用。Send_file:打開傳送資料。函數調用關係如下圖:程式代碼層次分明,易於閱讀和修改。b. 執行時僅需輸入需要傳送的資料名稱。 主函數調用Filename,提示輸入資料名稱,根據資料名稱設置STOR命令(即在資料名稱之前加“STOR”,之後加“rn”)。 然後主函數建立指令連接,調用File_transfer進行Client端的主要操作。 File_transfer中調用Command直接發送命令,無須輸入命令字符串。程序執行簡單,易於操作。c.Name Resolution 程式調用gethostbyname獲取伺服器I
2、P地址。根據地址去連接伺服器。相關代碼如下:struct hostent *server;server=gethostbyname(cramer.ee.nthu.edu.tw);獲取。servaddr1.sin_addr=*(struct in_addr *)server-h_addr);將連接到servaddr2.sin_addr=*(struct in_addr *)server- 有進行Name Resolution。3. Source code# includemath.hstdio.hstdlib.hwinsock2.hws2tcpip.h# define MAXLEN 1024/P
3、S: 執行時僅需輸入要傳送的資料名稱即可,程序會自動發送命令并輸出來自服務器的回信。/ 這些變量在多個函數中需要使用,因此定義在程序開頭。char RcvBufMAXLEN;int n;SOCKET a,b;/ a用於建立連線,b用於傳送資料。SOCKADDR_IN servaddr1,servaddr2;char name30,stor30=STOR ; / command用於向FTP服務器發送命令,然後接收回信并打印出來。int command(char *message) send(a, message, strlen(message), 0); n=recv(a, RcvBuf, MA
4、XLEN, 0); RcvBufn=0/ 在接收緩衝區的末尾加字符串結束符號。 printf(%snn, RcvBuf);/ 發送PSAV命令之後,port將收到的信息中的port y轉換為整數。 如接收“227 Entering Passive Mode (140,114,26,104,68,245)”,則p1=245,p2=68。int port() int i=0, j=0, k=0, p, p1=0, p2=0; while(RcvBufi!=) i+;/ 用while找到右括號,然後依次求p1、p2,從右往左進行計算。 for(i=i-1;j1;i-) /計算p1 if(RcvBuf
5、i=,) j+; else p=RcvBufi-0 / 將字符轉化為數字. p1=p1+pow(10,k)*p; k+; k=0; for(;2;i-) /計算p2 p2=p2+pow(10,k)*p; return p=p1+p2*256; / 傳送資料的連接建立之後,用於發送資料。int send_file() char SendBufMAXLEN; FILE *p; int FileSize; p=fopen(name, rb /打開資料。 fseek(p, 0L, SEEK_END); FileSize=ftell(p); /用fseek和ftell計算資料大小。 fread(Send
6、Buf, FileSize, 1, p);/將要發送的資料寫入發送緩衝區。 fclose(p); send(b, SendBuf, FileSize, 0); closesocket(b);/發送文件之後應及時關閉資料連接,不然收不到“226.。 return 0; /主函數調用此函數進行Client端的主要操作。 int file_transfer() int port_y,i=0; while(i/將gethostbyname返回的ip信息連接到socket. servaddr2.sin_family=AF_INET; servaddr2.sin_addr=*(struct in_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