我需要做一个从服务器端取客户端文件的程序,
要求尽可能的减少客户端资源的使用,目前考虑这样几种情况:
1.使用ftp,从服务器端取客户端文件,服务器端运行程序,需要在客户端运行ftp服务;
2.使用soket,客户端和服务器端都需要运行程序?
3.共享客户端目录,服务器端运行程序进行读取。请各位高手帮忙分析一下,采用哪种方法较好?是否有类似源代码可用?
要求尽可能的减少客户端资源的使用,目前考虑这样几种情况:
1.使用ftp,从服务器端取客户端文件,服务器端运行程序,需要在客户端运行ftp服务;
2.使用soket,客户端和服务器端都需要运行程序?
3.共享客户端目录,服务器端运行程序进行读取。请各位高手帮忙分析一下,采用哪种方法较好?是否有类似源代码可用?
解决方案 »
- vc问题求助
- 如何判断线程已结束
- 郁闷一个晚上了,关于滚动条的GetScrollBarInfo(),哪位大侠用过,帮帮忙
- 请问如何在对话框类里调用视图类的变量?
- 如何获得另一个控件中的内容
- 怎样让滚动条永远可见 无须滚动时呈Disable状态
- 小弟想回老家开个小网吧,请大家给个意见吧!
- 关于建立网络联接的问题
- <<神经网络模式识别及其实现>>配套代码,谁有,谢谢 100分
- 我的com组件在vb下可用,在asp下不可用
- SDK 上传文件显示进度。 遇到问题。
- 200分解决:在Win98和Win2K里用系统快照枚举所有的进程时,好像只能得到应用程序的名字,无法得到程序所在的路径,而且长一点的文件名会
用socket一是两边都要有程序,另外就是编程序麻烦
共享有安全漏洞看来如果是经常传送大量的文件的话用ftp
偶尔传送小量文件的话用socket
局域网中用共享
网上的代码很多,随便搜一下就行了
使用FTP可能更好点。
谢谢PiggyXP,我的mail:[email protected]。
跨网段的用FTP,MFC中有CInternet的类,用FTP很方便。
>这样是不是能在不建共享目录的情况下直接进行文件传送Win2K 是这样的,基于NetBios 文件共享方式可以很简单的复制文件(直接通过URI访问,或者把目标硬盘影射为本地网络驱动器),只要验证了身份有适当的权限,你可以把文件“塞”到目标计算机的硬盘上。局域网相对来说安全级别较低一些,实际上并不限于仅仅应用于局域网。呵呵,这样的方法并不是很好——为了安全,最好经常更改较高权限的用户帐号的密码,那么是不是也要更改你的系统程序或者配置,让它们也能继续保持对目标服务器的文件读写能力?如果嫌 ftp 麻烦,用 http 方式 + 反弹访问模式来进行文件传送即可。
比如:
A 需要传递文件给 B
首先,A 将文件压缩、加密、MD5摘要,发布到IIS的某个虚拟目录下(很简单的文件复制操作)
然后 A 将下载地址、密钥、MD5验证字符串通过加密方式通知B
之后,B 通过 http/ftp 协议访问 A 获取文件,然后经过 MD5 验证比对,解密/解压缩
最后,B 通知 A 已完成。至于 IIS 的自动化设置也很简单,调用 ADSI 或者 WMI 接口都可以实现(可以用 vbs 脚本来做)。甚至很多安装程序生成器都支持这一功能,如 InstallShield/WiseInstaller。呵呵,至于 http/ftp 协议客户端的实现比服务器端简单多了, CInternet 已经提供了相应功能,或者找几个现成组件也不难,比如 Power 系列的组件。
qq:82249758
email:[email protected]
我也再学
[email protected]
{
int ret;
char buf[BUF_SIZE];
DWORD len, readlen=0;
int block = BUF_SIZE; eIOFlag flag = io_length;
FILE *f; while(1)
{
if( io_length == flag )
ret = recv( sock, (char*)&len, 4, 0 );
else if( io_file == flag )
ret = recv( sock, buf, block, 0 );
else if( io_end == flag )
break;
if( 0 == ret )
break;
else if( SOCKET_ERROR == ret )
{
printf( "recv() failed: %d\n", WSAGetLastError() );
break;
} if( io_length == flag )
{
if( len < 10 )
return 0;
else
{
flag = io_file;
if( 0 == (f = fopen( file, "wb+" )))
break; if( len < BUF_SIZE )
block = len;
}
}
else if( io_file == flag )
{
fwrite( buf, 1, ret, f );
readlen += ret;
if( readlen == len )
{
fclose( f );
flag = io_end;
}
else
{
block = len - readlen;
if( block > BUF_SIZE )
block = BUF_SIZE;
}
}
}
return 1;
}
{
FILE *f = NULL;
eIOFlag flag = io_length;
char buf[BUF_SIZE];
DWORD outlen = 0; if( NULL == filename )
return false; if( INVALID_SOCKET == sock )
return false; if( 0 == (f = fopen( filename, "rb" )) )
return false; while( !feof( f ) )
{
int count;
count = fread( buf, 1, BUF_SIZE, f );
outlen += count;
} int nRet;
nRet = send( sock, (char *)&outlen, 4, 0 );
if( SOCKET_ERROR == nRet )
{
Error( __FILE__, __LINE__ );
return false;
} rewind( f );
nRet = fread( buf, 1, BUF_SIZE, f );
while( nRet > 0 )
{
nRet = send( sock, (char*)buf, nRet, 0 );
if( SOCKET_ERROR == nRet )
{
Error( __FILE__, __LINE__ );
return false;
}
nRet = fread( buf, 1, BUF_SIZE, f );
}
fclose( f ); return true;
}