我已经做了多年的套接字编程,但我从来没有使用过TCP的错过消息 - 直到现在。我在C中有一个java服务器和一个客户端 - 都在localhost上。他们以字符串形式来回发送短信,两者之间有一些延迟。我有一个特殊情况,即消息永远不会到达客户端。它是可重复的,但奇怪的是机器依赖。
为了提供更多细节,我可以调试服务器端并查看发送后跟刷新。我可以附加到客户端并遍历select调用(在循环中),但它根本不会显示。有没有人经历过这种情况,除了编码错误之外还有解释吗?
换句话说,如果你有一个连接的套接字,一边写一个写,另一边读一个,中间会发生什么导致这样的事情?
另一个细节 - 我在loopback接口上使用了tcpdump,可以看到错过的消息。
答案 0 :(得分:4)
我之前在SMTP交易中看到过这种情况。你在那台机器上运行了病毒扫描程序吗?如果是这样,请尝试将其关闭,看看是否会产生影响。
否则,我建议您安装Wireshark,以便了解实际情况。
答案 1 :(得分:1)
最后 - 在嗅了一些之后,我发现了问题。两个消息在读取之前被发送(有时,但很少......)所以它们都被读取,但只有第一个被处理。这就是为什么第二条消息似乎永远不会到来的原因。它被埋在接收缓冲区中。