2

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

任何帮助将不胜感激。

亲切的问候

骗局。

4

2 回答 2

1

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

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

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

于 2013-01-14T14:21:27.913 回答
1

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

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

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

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

于 2013-01-15T07:05:45.820 回答