我的应用程序与pinpad设备对话。 pinpad充当服务器等待客户端连接。我解雇我的应用程序,它连接到pinpad我发送命令我得到一个ack回来,事情很好。
现在我从pinpad上拔下以太网线,我发送命令,超时后我的应用程序发出一条错误消息,说“设备无法到达/找到”。
好的,我把电缆插回到pinpad中,现在每当我尝试向pinpad发送命令时,我都会得到相同的'设备无法到达/找到'的消息。所以我必须重新启动我的应用程序并且事情很好。
这是否意味着在我拔下电缆后,双方使用的原始套接字丢失了,或者在拔下电缆后我的应用程序正在通话的端口是无用的?现在我需要一个新的端口?
这两个应用程序正在通过TCP / IP进行通信。
答案 0 :(得分:1)
您没有说明您正在使用哪种传输协议。
如果您使用TCP (流套接字),那么它取决于。如果在连接中断(连接空闲)并且未配置TCP keepalive的时间间隔内没有数据传输,则没有任何效果:连接恢复后传输的数据将通过,就好像始终存在连接一样。另一方面,如果在连接断开时传输数据,则会发生以下情况之一:
ETIMEDOUT
错误,或者在连接恢复后出现ECONNRESET
错误。在任何一种情况下,套接字在此事件后都不会再次工作。如果您仍想进行通信,则客户端必须打开与服务器的新连接。如果您正在使用UDP (数据报套接字),那么如果在连接中断时进行传输,则可能会出现错误和超时,但一旦连接恢复,一切都将正常工作。没有“记忆”。