TIdtcpserver 缓冲区是否有内部大小限制?为什么我使用任何方法,它达到了 65535 的限制?
这些天我遇到了这个 TidTCPSever 的缓冲区问题。我的代码非常基本:预设缓冲区数组的大小,从 InputBuffer 中提取服务器字节,并将缓冲区数组复制到工作区。这是代码
TByteDynArray buffer; // decliared in private
void __fastcall TmodWifiCom::IdServerExecute(TIdContext *AContext)
{
long readLength;
int c, s;
byte b;
DataH->FDataReceivedBytes=0;
AContext->Connection->IOHandler->CheckForDataOnSource(10);
while (!AContext->Connection->IOHandler->InputBufferIsEmpty()) {
// get hint of size of buffer
s = AContext->Connection->IOHandler->InputBuffer->Size;
buffer.set_length(s);
AContext->Connection->IOHandler->InputBuffer->ExtractToBytes(buffer,-1,false);
readLength = buffer.Length;
for (long i = 0; i < readLength; i++) {
b = buffer[i];
DataH->FDataBuffer[DataH->FDataReceivedBytes++]=b; // copy buffer bytes to workspace
}
// process workspace
}
}
该代码似乎工作正常, readLength 和 s 是相等的。FDataBuffer 似乎接收每个字节。但是,由于 TidTCPSever 达到限制双端队列失败。
// private of head file in other class
frameQue_Type frameQue0;
deque<frameQue_Type> frameQue;
// cpp file in other class
frameQue.push_back(frameQue0);
...
frameQue0 = DataH->frameQue.pop_front(); // [ERROR STOPS HERE]
错误消息是:访问 volation #0048D893
我不明白:
- TidTCPSever 和 deque 属于不同的类
- 双端队列中的结构值看起来不错
- 缓冲区大小达到 65535 字节时立即发生错误
我使用缓冲区对吗?