【发布时间】:2013-01-31 05:10:45
【问题描述】:
我在 windows 中开发了一个带有 qt 的 tcp-server。大约有 10-20 个客户端连接服务器,并且服务器和客户端之间存在数据传输。每个连接的客户端都有不同的线程。服务器发送一个数据包,如果收到 ACK,则等待对该数据包的回复,然后发送下一个数据包。如果没有回复,则超时。如果客户端在 2 分钟内没有发送答案,我的服务器会再次发送相同的数据包。
这没有问题。 (顺便说一下我的电脑windows7家庭高级版)当我将我的应用程序带到另一台装有windows7 Ultimate的电脑上时,如果超时,而不是再次发送相同的数据包,它什么也不做。我的电脑和这台电脑的另一个区别是,这台电脑没有安装qt。我使用所需的 dll 运行我的应用程序。
什么会导致这个问题?
提前致谢。
【问题讨论】:
-
它在另一台计算机上是否有效?如果不是,这可能是防火墙配置的问题...
-
为什么要重新实现 TCP?它已经完成了所有这些。
-
您的代码中可能存在导致未定义或实现定义的行为的错误 - 为什么不显示相关代码?另外,TCP 内置了重传逻辑——在同一个 TCP 连接上手动触发重发的整个想法是值得怀疑的。
-
“每个连接的客户端都有不同的线程” - 这是另一个坏主意,如果我理解你的意思是每个客户端有一个线程。这不能很好地扩展。
-
我没有重新实现tcp。我使用 QTcpServer 来处理这些事情。但我有这个问题。 @Yahia我不认为这是防火墙配置,因为该过程开始了,它继续,但是在不同的状态下由于某种原因它停止了,什么也没发生。我有一个日志,但里面什么都没有。