服务器断开连接并重新连接后,客户端端口/套接字会发生什么?

时间:2013-05-02 15:04:55

标签: sockets client-server tcp-ip

我的应用程序与pinpad设备对话。 pinpad充当服务器等待客户端连接。我解雇我的应用程序,它连接到pinpad我发送命令我得到一个ack回来,事情很好。

现在我从pinpad上拔下以太网线,我发送命令,超时后我的应用程序发出一条错误消息,说“设备无法到达/找到”。

好的,我把电缆插回到pinpad中,现在每当我尝试向pinpad发送命令时,我都会得到相同的'设备无法到达/找到'的消息。所以我必须重新启动我的应用程序并且事情很好。

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

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

1 个答案:

答案 0 :(得分:1)

您没有说明您正在使用哪种传输协议。

如果您使用TCP (流套接字),那么它取决于。如果在连接中断(连接空闲)并且未配置TCP keepalive的时间间隔内没有数据传输,则没有任何效果:连接恢复后传输的数据将通过,就好像始终存在连接一样。另一方面,如果在连接断开时传输数据,则会发生以下情况之一:

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

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