读书人

bcb 实现文件的上传下载(不用ftp) 真

发布时间: 2012-03-20 14:01:11 作者: rapoo

bcb 实现文件的上传下载(不用ftp) 真的急需,希望大家多帮帮
各位好!本人现在正用bcb做一个C/S结构的上传文件到服务器和从服务器指定目录下载文件到本地的小系统,
由于刚用bcb不久,所以不是很熟
上传本人用TServerSocket、TClientSocket和NMStrm、NMStrmServ已经实现,
但是从服务器指定目录下载文件到客户端却不会做了,
希望大家可以帮帮忙,有代码更好。
多谢大家,由于本人只有20多分,现只能给大家20分了。谢谢大家啦

[解决办法]

C/C++ code
下载文件要用到操作系统的API函数,下面是一个WINDOWS系统中的实现://---------------------------------------#include <stdio.h>#include <windows.h>#include <wininet.h>#define MAXBLOCKSIZE 1024#pragma comment( lib, "wininet.lib" ) ;void download(const char *Url,const char *save_as)/*将Url指向的地址的文件下载到save_as指向的本地文件*/{  byte Temp[MAXBLOCKSIZE];   ULONG Number = 1;   FILE *stream;   HINTERNET hSession = InternetOpen((LPCWSTR)"RookIE/1.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (hSession != NULL) {  HINTERNET handle2 = InternetOpenUrl(hSession, (LPCWSTR)Url, NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);  if (handle2 != NULL)  {       if( (stream = fopen( save_as, "wb" )) != NULL )   {    while (Number > 0)    {     InternetReadFile(handle2, Temp, MAXBLOCKSIZE - 1, &Number);          fwrite(Temp, sizeof (char), Number , stream);    }    fclose( stream );   }      InternetCloseHandle(handle2);   handle2 = NULL;  }  InternetCloseHandle(hSession);  hSession = NULL; }}int main(int argc, char* argv[]){ download("http://www.baidu.com/","c:\\index.html");/*调用示例,下载百度的首页到c:\index.html文件*/ return 0;}//---------------------------------------
[解决办法]
我也很久没做C/S的程序了,所以细节东西帮不上忙,你可以自己去查资料找例子。

我的思路是这样的:
你的C/S结构是不是分服务器端跟客户端两个程序?当用户从客户端发出浏览某个文件夹的指令时,该指令通过两者之间的Socket连接传给服务器,服务器端收到指令后通过TSearchRec、FindFirst、FindNext遍历文件夹,然后,你可以将结果写到一个文件(比如HTML、XML),回传给客户端,也可以写成你自己设计的流格式传回客户端。具体怎么做,还要看你的客户端是通过哪种方式显示结果,对吧?

读书人网 >C++ Builder

热点推荐