Indy TFTP 服务器异常 EIdTFTPAllocationExceeded

Indy TFTP Server Exception EIdTFTPAllocationExceeded

我在将文件从我(服务器 - 使用 Indy TIdTrivialFTPServer 组件)传输到设备时收到 EIdTFTPAllocationExceeded 异常。我找不到关于该异常可能意味着什么的任何信息,除了客户端上的磁盘 space 问题(我知道情况并非如此,因为如果我通过不同的 TFTP 服务器传输文件,则没有问题)。

  1. 异常试图告诉我什么?
  2. 我该如何绕过它?
  3. 我是否缺少任何代码?

我的服务器的 TFTP 服务器代码(全部)是:

__fastcall TTrivialFTPServer::TTrivialFTPServer(TComponent* Owner) : TDataModule(Owner)
{
    root = IncludeTrailingPathDelimiter(GetCurrentDir());
}

// ---------------------------------------------------------------------------
void __fastcall TTrivialFTPServer::tftpReadFile(TObject *Sender, UnicodeString &FileName, const TPeerInfo &PeerInfo, bool &GrantAccess, TStream *&AStream, bool &FreeStreamOnComplete)
{
    FreeStreamOnComplete = true;
    FileName = StringReplace(FileName, "/", "\", TReplaceFlags() << rfReplaceAll);
    FileName = ExtractFileName(FileName);
    if (FileExists(root + "files\" + FileName, false))
    {
        AStream = new TFileStream(root + "files\" + FileName, fmOpenRead | fmShareDenyWrite);
        GrantAccess = true;
    }
    else
    {
        GrantAccess = false;
    }
}

苦思冥想,终于打开IdTrivialFTPServer.pas文件,发现了问题所在。代码状态:

if FBlkCounter = High(UInt16) then begin
    raise EIdTFTPAllocationExceeded.Create('');
end;

当我向异常添加文本时,我收到了添加的文本,所以这是发生错误的地方。我尝试从 UInt16 转换为 UInt32,但引起了更多问题,所以我想看看如果我只是注释掉检查并让计数器回滚到零会发生什么。

事实证明,没有任何问题发生,文件传输正常!