歡迎您光臨本站 註冊首頁

ftp客戶端上傳功能代碼設計

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

ftp客戶端上傳功能代碼設計

ftp客戶端 下載功能,用一個recv就可以接受所有的數據了。可上傳的時候,如果僅用send函數來實現,目標文件的大小比原文件要小。懷疑是上傳過程中需要傳輸控制,誰能解釋一下原因並大概給個思路,謝謝。
《解決方案》

原帖由 user2003 於 2007-9-13 16:24 發表 http://bbs.chinaunix.net/images/common/back.gif
ftp客戶端 下載功能,用一個recv就可以接受所有的數據了。可上傳的時候,如果僅用send函數來實現,目標文件的大小比原文件要小。懷疑是上傳過程中需要傳輸控制,誰能解釋一下原因並大概給個思路,謝謝。
FTP協議沒有特別的控制, 上傳結束只是用簡單的關閉數據Socket的方式告訴對端的.
《解決方案》

我累計了每次send函數的返回值,發現其與源文件的大小是一致的,可為何伺服器(接受端)生成的文件大小卻小於源文件呢?
《解決方案》

ftp客戶端 下載功能,用一個recv就可以接受所有的數據了。可上傳的時候,如果僅用send函數來實現,目標文件的大小比原文件要小。

==================================上傳 部分的代碼: ==================================
void process_sendfile(int rd_sockfd)
{
         int n=1;
         int line =1;
         FILE *fup;


         fup=fopen("333.exe", "rb");

         while (n!=0)

         {
                  n=fread(filebuf, 1, FILEBUF_LEN, fup);

                  n=send(rd_sockfd, filebuf, n, 0);

                 printf("line %d, n is %d\r\n",line++,n);
         }

         close(rd_sockfd);
}




==================================從ftp server上看的上傳記錄==================================
Fri 14Sep07 11:44:35 - (000005) Connected to 10.10.60.99 (Local address 10.10.60.99)

Fri 14Sep07 11:44:35 - (000005) User ABC logged in

Fri 14Sep07 11:44:35 - (000005) Receiving file d:\ftp\new.exe

Fri 14Sep07 11:44:36 - (000005) Error receiving file d:\ftp\new.exe, aborting (2240 kB/sec - 458752 Bytes, command connection closed)

Fri 14Sep07 11:44:36 - (0000

Yang Yang 說:

紅色部分出現了異常,文件總大小因該市488752左右,不知為何abort了




===============================抓包記錄==================================
---------------------FTPC出問題時的抓包記錄---------------------



No.     Time        Source                Destination           Protocol Info

    575 0.085038    10.10.60.99           10.10.60.56           FTP-DATA FTP Data: 688 bytes

    576 0.085088    10.10.60.56           10.10.60.99           TCP      3268 > 3644 Seq=1 Ack=479517 Win=49151 Len=0

    577 0.085310    10.10.60.56           10.10.60.99           TCP      3268 > 3644 Seq=1 Ack=482437 Win=46231 Len=0

    578 0.085518    10.10.60.56           10.10.60.99           TCP      3268 > 3644 Seq=1 Ack=484789 Win=43879 Len=0

    579 0.085761    10.10.60.56           10.10.60.99           TCP      3268 > 3644 Seq=1 Ack=487709 Win=40959 Len=0

    580 0.088016    10.10.60.56           10.10.60.99           TCP      3268 > 3644 Seq=1 Ack=488397 Win=65535 Len=0

    581 0.129264    10.10.60.99           10.10.60.56           TCP      3644 > 3268 Seq=488397 Ack=1 Win=0 Len=0

    582 0.129340    10.10.60.99           10.10.60.56           TCP      3643 > ftp Seq=70 Ack=276 Win=0 Len=0

    583 1.504890    10.10.60.56           10.10.60.99           NBNS     Name query NBSTAT *<00><00><00><00><00><00><00><00><00><00><00><00><00><00><00>

    584 1.504997    10.10.60.99           10.10.60.56           NBNS     Name query response NBSTAT


---------------------FlashFXP正常上傳抓包記錄---------------------



No.     Time        Source                Destination           Protocol Info

   3244 0.426788    10.10.60.99           10.10.60.56           FTP-DATA FTP Data: 1176 bytes

   3245 0.426951    10.10.60.99           10.10.60.56           TCP      1980 > 2076 Seq=2727937 Ack=1 Win=65535 Len=0

   3246 0.427074    10.10.60.56           10.10.60.99           TCP      2076 > 1980 Seq=1 Ack=2722665 Win=65535 Len=0

   3247 0.427215    10.10.60.56           10.10.60.99           TCP      2076 > 1980 Seq=1 Ack=2723841 Win=64359 Len=0

   3248 0.427419    10.10.60.56           10.10.60.99           TCP      2076 > 1980 Seq=1 Ack=2726761 Win=65535 Len=0

   3249 0.427475    10.10.60.56           10.10.60.99           TCP      2076 > 1980 Seq=1 Ack=2727937 Win=64359 Len=0

   3250 0.427705    10.10.60.56           10.10.60.99           TCP      2076 > 1980 Seq=1 Ack=2727938 Win=64359 Len=0

   3251 0.428936    10.10.60.56           10.10.60.99           TCP      2076 > 1980 Seq=1 Ack=2727938 Win=64359 Len=0

   3252 0.428964    10.10.60.99           10.10.60.56           TCP      1980 > 2076 Seq=2727938 Ack=2 Win=65535 Len=0

   3253 0.454703    10.10.60.56           10.10.60.99           FTP      Response: 226 Transfer complete.

[ 本帖最後由 user2003 於 2007-9-14 13:57 編輯 ]
《解決方案》

你的客戶端關閉連接發的是RST, 這是reset,當然伺服器abort了. Flashfxp發的是FIN,正常關閉. 關閉socket連接最好先shutdown(), 然後在close()

[火星人 ] ftp客戶端上傳功能代碼設計已經有477次圍觀

http://coctec.com/docs/service/show-post-35740.html