0

我的应用程序与 pinpad 设备对话。pinpad 充当等待客户端连接的服务器。我启动我的应用程序,它连接到密码键盘我发送一个命令我得到一个确认,一切都很好。

现在我从密码键盘上拔下以太网电缆,我发送一个命令,超时后我的应用程序吐出一条错误消息,说“无法访问/找到设备”。

好的,我将电缆插回密码键盘,现在每次我尝试向密码键盘发送命令时,我都会收到相同的“无法访问/找到设备”消息。所以我必须重新启动我的应用程序,一切都很好。

这是否意味着我拔掉电缆后双方使用的原始插座丢失了,或者拔掉电缆后我的应用程序正在通话的端口无用?现在我需要一个新端口?

这两个应用程序通过 TCP/IP 进行通信。

4

1 回答 1

1

您没有说您使用的是哪种传输协议。

如果您使用的是 TCP(流套接字),那么这取决于。如果在连接中断(连接空闲)期间没有数据传输,并且没有配置TCP keepalive,则没有效果:恢复连接后传输的数据将一直像连接一样通过. 另一方面,如果在连接中断时传输数据,则会发生以下情况之一:

  • 如果连接中断是短暂的,那么数据最终会在连接恢复后重新传输,连接会恢复到正常状态。
  • 如果连接中断时间较长,则一端或两端的 TCP 堆栈最终会声明发生超时。ETIMEDOUT发生这种情况时您会收到错误消息,或者ECONNRESET在连接恢复后会出现错误消息。在任何一种情况下,此事件后套接字都不会再次工作。如果您仍想通信,客户端将不得不打开与服务器的新连接。

如果您使用的是 UDP(数据报套接字),那么如果您在连接中断时进行传输,则可能会出现错误和超时,但一旦连接恢复,一切都会再次正常工作。没有“记忆”。

于 2013-05-02T16:40:54.600 回答