5

我对放置在 LAN 中的文件有一些问题:有一个 Delphi 程序(服务器)应该写入一些文件,这些文件只能由多个 Deplhi 程序(客户端)读取。我在服务器中使用这些简单的指令进行编写(DataList 是一个 TStrings):

Stream:=TFileStream.Create(filePath,fmOpenWrite or fmShareDenyWrite);
try
 DataList.SaveToStream(Stream);
finally
 Stream.Free;
end;

客户端每 5 秒检查一次上述文件是否被修改(仅通过检查 FileAge),如果发生修改,则以以下方式加载 DataList:

try
 Stream:=TFileStream.Create(filePath,fmOpenRead or fmShareDenyNone);
 DataList.LoadFromStream(Stream);
finally
 Stream.Free;
end;

通常一切正常,但有时会发生服务器或客户端引发异常,因为“文件正在被其他进程使用”。我不明白问题出在哪里:我尝试了很多替代方案,但这也可能发生在服务器和客户端运行的一个 istance 中。

有任何想法吗?

谢谢!

4

1 回答 1

3

按照设计,网络文件系统是不可信的。至少,NFS(Linux 中)和 SMB(Windows 中)没有经过验证的锁定功能:并发访问并不安全。

您需要使用客户端-服务器协议来确保共享数据是安全的。您可以使用 TCP/IP、HTTP 或任何其他方式。

我建议使用真正的服务实现,例如 DataSnap、RemObjects 或我们的开源 mORMot

于 2012-07-25T19:23:11.057 回答