2009-06-18 47 views
4

我一直在做套接字编程多年,但我从来没有错过使用TCP的消息 - 直到现在。我有一个java服务器和C客户端 - 都在本地主机上。他们会以字符串的形式来回传递短信息,而且两者之间有一些延迟。我有一个特殊情况,消息永远不会到达客户端。它是可重现的,但奇怪的是与机器有关。未接的套接字消息

为了给出更多的细节,我可以调试服务器端,并看到发送,然后刷新。我可以附加到客户端,并通过选择的呼叫(循环),但它从来没有出现。有没有人遇到过这个问题,并且除编码错误之外还有其他解释吗?

换句话说,如果你有一个连接的套接字,并在一边进行写操作,而在另一边进行读操作,那么在中间会发生什么类似的事情?

另一个细节 - 我已经在回送接口上使用tcpdump,并可以看到错过的消息。

+0

您的客户端是多线程的吗?是否有可能单独的线程也选择()该消息?另外,你在使用什么操作系统? – 2009-06-18 04:26:10

+0

我不认为它有可能让另一个线程选择它。这是在Linux上。好主意 - 我用柜台核实。 – AdamC 2009-06-18 04:59:11

回答

1

最后 - 在嗅探一些之后,我发现了这个问题。两条消息在阅读之前发送(有时,但很少......),所以它们都被读取,但只有第一条被处理。这就是为什么它看起来好像第二条消息没有到达。它被埋在接收缓冲区中。

4

我以前见过这种情况发生在SMTP交易中。你有在该机器上运行的病毒扫描程序?如果是这样,请尝试关闭它,看看是否有所作为。

否则,我会建议安装Wireshark,这样你就可以看看实际发生了什么。

+0

他使用tcpdump并看到丢失的消息。 Wireshark提供了更多细节,但不会有很大的变化。 – bortzmeyer 2009-06-18 08:50:21