【发布时间】:2009-06-18 04:18:10
【问题描述】:
我从事套接字编程已经很多年了,但我从来没有使用 TCP 丢失过消息——直到现在。我在 C 语言中有一个 java 服务器和一个客户端 - 都在本地主机上。他们以字符串的形式来回发送短消息,中间有一些延迟。我有一个特殊情况,消息永远不会到达客户端。它是可重现的,但奇怪的是依赖于机器。
为了提供更多细节,我可以调试服务器端并查看发送和刷新。我可以附加到客户端并遍历选择调用(在循环中),但它根本不会出现。有没有人遇到过这种情况,除了编码错误还有其他解释吗?
换句话说,如果您有一个已连接的套接字并在一侧进行写入并在另一侧进行读取,那么中间会发生什么导致这样的事情?
另一个细节 - 我在环回接口上使用了 tcpdump,可以看到丢失的消息。
【问题讨论】:
-
您的客户端是多线程的吗?是否有可能在该消息上也有一个单独的线程正在选择()?另外,您使用的是什么操作系统?
-
我认为其他线程不可能选择它。这是在 Linux 上。好主意 - 我用柜台验证了。