【问题标题】:Client is getting 'Connection Refused' when trying to Connect Indy 10 Server客户端在尝试连接 Indy 10 服务器时收到“连接被拒绝”
【发布时间】:2013-01-14 12:56:54
【问题描述】:

我们最近发布了一个使用 Indy 10 TIdTCPServer 用 Delphi 2010 编写的服务器。远程现场工程师使用他们的智能手机在预定义的端口上连接到服务器。我们有一个特定的客户告诉我们,在一段时间(1 天、2 天)等之后,客户在他的设备上收到 ECONNREFUSED (ConnectionRefused)。此时远程工程师都无法连接到服务器。有人知道为什么会这样吗?

非常感谢任何帮助。

亲切的问候

骗子

【问题讨论】:

    标签: delphi connection indy


    【解决方案1】:

    我最初的怀疑是 OnConnection OnExecute 或 OnDisconnect 的事件处理程序出现死锁。

    您是否在连接上下文(线程)之间正确同步?

    但是您需要发布您的服务器代码,以便我们检查。

    【讨论】:

    • OnConnection、OnExecute 和 OnDisconnect 事件有相当多的代码。我有一个更新的 TreeView 何时显示线程正在做什么。我使用 TidNotify 类来做到这一点。我认为只有更新我的数据和我必须同步的界面,认为 Indy 处理了连接上下文同步?
    • @CMB 我强烈建议使服务器成为没有任何 GUI 的 Windows 服务类型应用程序。将 TreeView 内容移动到一个单独的应用程序中,该应用程序使用基于 REST 的客户端界面来获取显示所需的信息。这将完全避免令人讨厌的 VCL 并发问题。
    • 问题似乎是我的网络间歇性中断导致软件无法跨网络访问数据库表
    【解决方案2】:

    ECONNREFUSED 表示两种可能的情况之一:

    1. 没有服务器套接字监听正在连接的 IP/端口。
    2. 有一台服务器正在监听,但它的待处理连接积压已满,此时无法接受新客户端的连接请求。

    对于 #1,使用端口查看工具(例如 NETSTAT 或 TCPView)验证您的服务器仍在运行,并且正在侦听的端口仍处于打开状态并处于 LISTENING 状态。

    对于 #2,检查您的服务器的 OnListenException 事件是否被触发,这表明服务器在接受来自其积压的连接时遇到问题。

    【讨论】:

    • OnListenException 事件未触发,但客户在按照指示运行 NetStat 之前重新启动了应用程序。看起来它必须是#1。等待更多信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多