TCP客户端无法从虚拟机获得Socket.Send的回复

时间:2014-02-07 17:05:41

标签: linux sockets tcp virtual-machine

我有一个TCP客户端,通过网络与虚拟机上运行的服务器通信,现在虚拟机的客户操作系统为IBM OS 4690,主机操作系统为Linux。

有时,在来宾操作系统上运行的TCP服务器应用程序将重新启动。它似乎在重新启动之前正确地调用套接字。

重启后,当客户端尝试执行Socket.Send时,服务器无响应。

如果服务器正在运行物理硬件,则客户端能够通过TCP错误10054检测到连接重置。当服务器在虚拟机上运行时,这不会出现。

1 个答案:

答案 0 :(得分:0)

您的TCP客户端应该准备好根本不回答发送请求。想象一下当TCP客户端发送数据并且服务器机器突然重启(或断电)时的情况。客户端应用程序不会获得任何TCP RST标志(错误10054)。

例如,您可以添加重传逻辑应用程序协议来处理此类情况。 它可以是这样的:

    - 客户端发送数据
    - 如果预定义时间或连接没有响应关闭 - 重复请求(数据发送)。
    - 如果尝试次数超过某个值(例如5),则声明服务器不可用。