我有一个TCP客户端,通过网络与虚拟机上运行的服务器通信,现在虚拟机的客户操作系统为IBM OS 4690,主机操作系统为Linux。
有时,在来宾操作系统上运行的TCP服务器应用程序将重新启动。它似乎在重新启动之前正确地调用套接字。
重启后,当客户端尝试执行Socket.Send
时,服务器无响应。
如果服务器正在运行物理硬件,则客户端能够通过TCP错误10054检测到连接重置。当服务器在虚拟机上运行时,这不会出现。
答案 0 :(得分:0)
您的TCP客户端应该准备好根本不回答发送请求。想象一下当TCP客户端发送数据并且服务器机器突然重启(或断电)时的情况。客户端应用程序不会获得任何TCP RST标志(错误10054)。
例如,您可以添加重传逻辑应用程序协议来处理此类情况。 它可以是这样的: