【发布时间】:2012-08-17 10:31:18
【问题描述】:
我收到了 10 台新电脑,全部(据说)都安装了新的 Windows 7 Pro,并且没有对它们进行任何其他操作。
我有一个程序,用 Delphi XE2 编码,使用 Indy 10 组件进行网络连接。我将 TIdTcpCleint 的“连接超时”和“读取超时”属性设置为 500 毫秒,将“重新使用套接字”设置为“o/s 依赖””(我还尝试了将其设置为“否”的构建)并保留“使用 Nagle” (无论设置为 True(我也尝试使用 false)。
问题是:当我在这些 PC 上运行相同的 .EXE 并测试我拉网线的情况时,我的调试跟踪显示连接尝试/连接超时发生在同一秒或下一秒(带有1 秒的粒度) - 但在其他情况下,我看到连接超时之前是 20 或 21 秒。
看起来有些 PC 并不像声称的那样完全“全新安装”,尽管我看到没有安装任何应用程序。也许有人安装了某些东西然后将其删除,也许他们试图调整性能。
在我在 10 台电脑上重新安装 Windows 之前,任何人都可以建议在哪里查看吗?关于 TCP 客户端连接超时,20(或 21)秒是否会响铃?
[更新] 我正在尝试直接连接到特定的 IP 地址,所以我不确定@Nikolai 检查 DNS 的建议是否相关。很抱歉最初没有提到这一点。
[更新] 程序不会尝试保持套接字打开。它连接、发送一些数据和断开连接 - 重复,对于每条新数据。
【问题讨论】:
-
随机猜测 - 检查 DNS 如何在这些不同的 PC 上运行。
-
在盒子上运行wireshark,看看发生了什么
-
为您节省一点时间 - wireshark.org
-
为什么要拉网线?你也可以尝试连接一个无效的IP地址,结果应该是一样的!拉线不会自动触发“重新连接”,只有应用代码可以做到这一点。
-
@Mawg IIRC "ReadTimeout" 表示每个字节读取之间的毫秒数是允许的最大时间,500 相当多,我会选择更低的。