我们在 Indy10 中遇到了一个奇怪的问题,我们使用 TCP 一个接一个地发送的两个大字符串(每个几百个字符)在另一端奇怪地交织在一起。这种情况极少发生。
每个字符串都是以 LF 结尾的完整 XML 消息,通常 READ 进程读取整个 XML 消息,并在看到 LF 时返回。
实际发送消息的调用受到对 IOHandler 的 writeln 方法调用的关键部分的保护,因此两个线程不可能同时发送。(我们确定关键部分已实现/正常工作)。这个问题很少发生。症状很奇怪......当我们发送字符串 A 后跟字符串 B 时,我们在另一端收到的(在我们遇到故障的极少数情况下)是字符串 A 本身的尾随部分(即, 末尾有一个 LF),然后是字符串 A 的前导部分,然后是整个字符串 B,然后是一个 LF。我们已经验证在部分读取后“超时”属性不正确 - 我们在每次读取返回内容后记录该属性。此外,我们知道字符串中没有嵌入的 LF 字符,因为我们在附加 LF 并发送它之前用空格显式替换字符串中的所有非字母数字字符。
我们在传输端和接收端的关键部分都有日志机制,因此我们可以在“线路”处看到这种行为。
我们完全困惑并想知道(尽管总是最低可能性)是否可能存在一些可能导致此问题的低级 Indy 问题,例如,缓冲区以错误的顺序发送......很难相信这可能是这个问题,但我们正在抓住稻草。
有没有人有什么好主意?