我们遇到与Indy10一个奇怪的问题,在两个大串(每几百个字符),我们其他使用TCP都出现在另一端之后发出一个奇怪的交织在一起。这种情况不经常极

每个串是具有LF和一般的读取处理读取整个XML消息,当它看到的LF返回终止的完整的XML消息。

实际发送消息中的呼叫由呼叫到IOHandler的writeln方法周围的关键部分的保护,所以它是不可能的两个线程同时发送。 (我们是一定的临界区执行/正常工作)。这个问题很少发生。症状是奇......当我们本身(的即,有一个在它的结束,接着串A的前部,然后整个字符串B,接着通过单个LF一个LF)。我们已经验证了“超时”属性一部分读之后是不是真的 - 我们日志属性每一个返回的内容读取之后。另外,我们知道有字符串中没有嵌入LF字符,因为我们明确地追加LF和发送之前用空格替换字符串中的所有非字母数字字符。

我们对发射和接收两端的临界区内部日志机制,所以我们可以在“线”看到此行为。

我们正在彻底难倒了,不知道(尽管总是最低的可能性)是否有可能是,可能会导致此问题的一些低级别的印问题,的例如的,而以错误的顺序发送缓冲区。 ......很难相信这可能是问题,但我们在抓救命稻草。

有没有人有什么好主意?

有帮助吗?

解决方案

你有多个线程在同一时间在接收端从同一个插座读书?甚至只是为了查询连接()状态导致发生一读。这可能导致你的多线程读入数据,并将其存储到IOHandler.InputBuffer以随机顺序,如果你不小心。

其他提示

您可以尝试 Wireshark的找出数据是如何tranferred。这样,您就可以找出问题是否出在服务器或客户端。还记得使用TCP右为了得到“保证”的有效数据。

您使用TCP或UDP?如果使用的是UDP,它是可能的(和预期)的UDP数据包可以以不同的顺序比他们发送接收,由于在网络上的路由。如果是这样的话,你需要某种形式的数据包ID添加到每个UDP数据包,使接收机能够正确排序的报文。

你检查过的IOHandler的内格尔设置?我们有我们的固定通过UseNagle设置为false,类似的问题。在我们的情况下发送和接收大量突发数据的缓慢是由于内格尔合并,所以它并不像你的情况完全一样。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top