我想做一个小系统,进来支个招(100分)

  • 主题发起人 主题发起人 ykjt
  • 开始时间 开始时间
Y

ykjt

Unregistered / Unconfirmed
GUEST, unregistred user!
每月给下属公司发资料,接收者有菜鸟用邮箱不太方便。现在我每月放在公司内部网上供他们下载,因要加密还要打电话告诉他们密码,很不方便。不加密又怕被无关人员下载看了。
所以我想做这样一个小系统:
1。做一个托盘程序,发给每一个接收者,为防止一机多人用而失控,只要使用托盘程序就必须输入密码,密码可由使用人自选设定;
2。从托盘程序中直接访问内部网中的某一网页去下载,该网页并不被网站链接(这样就可以防止被无关人员下载),所以数据包不用加密;
3。从托盘程序中可以知道网站上是不是最新的数据包,从而决定是否下载;
以上程序,一方面实用,一方面练习编程。
多谢帮助
 
可以呀,你都想好了,就做呗
 
主要难点:
3。从托盘程序中可以知道网站上是不是最新的数据包
不知如何做,还请指点
 
我的难点:
单击右键时,要求输入密码,密码正确弹出菜单
另:密码以何种方式存放
 
以何种方式进行验证并不重要
到服务器上验证密码
要不我给你做个Demo(如果有时间)
 
要知道服务器上是不是最新的,其实就是一个版本文件的问题,服务器上放个版本文件,更新了文件,版本文件里面的内容也更新,这样客户端下载去之后,首先和上次下载下来的做一个对比,如果不同,那就有更新了,就下载撒,如果是相同的,那就没有更新。
 
要知道服务器上是不是最新的,不一定要用到文件版本的比较,我编译一个exe文件后又修改了,重新编译时不改版本号也是很正常的,所以你可以采用比较文件修改时间的方法来判断。
 
有个示例就好了
 
给你一个用Ftp下载更新的Demo:
program Update;
uses
Windows, SysUtils, IdFTPList, IdAllFTPListParsers, IdFTP;
{$R *.res}
function CovFileDate(Fd:_FileTime): TDateTime;
//转换文件的时间格式
var
Tct: _SYSTEMTIME;
Temp: _FILETIME;
begin
FileTimeToLocalFileTime(Fd,Temp);
FileTimeToSystemTime(Temp,Tct);
CovFileDate := SystemTimeToDateTime(Tct);
end;

procedure begin
Update;
var
IdFTP1: TIdFTP;
i: Integer;
F: TSearchRec;
ExeFileLastDate: TDateTime;
begin
ExeFileLastDate := Now();
//先得到客户端可执行文件的修改时间
if FindFirst('loyalty.exe', 63, F) = 0 then
begin
repeat
if (F.Attr and 63) = F.Attr then
ExeFileLastDate := CovFileDate(F.FindData.ftLastWriteTime);
until FindNext(F) <> 0;
FindClose(F);
end;

IdFTP1 := TIdFTP.Create(nil);
IdFTP1.Host := '192.168.1.19';
IdFTP1.Username := 'test';
IdFTP1.Password := '123456';
if not IdFTP1.Connected then
IdFTP1.Connect();
IdFTP1.ChangeDir('UpdateFile');
IdFTP1.List;
for i := 0 to IdFTP1.DirectoryListing.Count - 1do
//遍历 Ftp 服务器
if IdFTP1.DirectoryListing.Items.ItemType = ditFile then
if (IdFTP1.DirectoryListing.Items.ModifiedDate * 24 + 8) / 24 > ExeFileLastDate then
IdFTP1.Get(IdFTP1.DirectoryListing.Items.FileName, IdFTP1.DirectoryListing.Items.FileName, True);
IdFTP1.Disconnect;
end;

begin
try
begin
Update;
finally
WinExec(PChar(ExtractFilePath(ParamStr(0)) + 'demo.exe ' + ParamStr(1)), SW_NORMAL);
Halt;
end;
end.
 
用飞鸽吧。
 
IdFTP1.Host := '192.168.1.19'
能否用这样的形式:
IdFTP1.Host := '192.168.1.19/web'
如果数据包是放在该文件夹下的
 
不能用你写的形式,你可以用IdFTP1.ChangeDir('web');来指定文件夹,如果有多级,可这样写:IdFTP1.ChangeDir('UpdateFile/1/web');
 
密码使用md5方式加密,不要使用明文。
网上有md5.pas可以使用
这个是生成的md5密文a:=md5print(md5(edit1.text));
把a发送到服务器去验证。
 
后退
顶部