我正在使用Delphi 7,TServerSocket和TClientSocket控件开发一个C / S程序。一个问题是现在我只能使用我的电脑作为服务器,而我的电脑正在使用虚拟拨号器,因此ISP会在一两天内不断更改我的IP。
因为我正在使用路由器,所以ServerSocket直接在我的本地IP(192.168.1.x)中打开,只是映射到我的公共IP,所以我想当我的公共IP更改时,ServerSocket本身不应该崩溃。我认为应该是:当我的IP发生变化时,所有连接套接字都变得不可用,当我的应用程序不知道它并且仍在使用套接字时,ServerSocket应该收到一些像OnClientError这样的事件。
但我发现了一个奇怪的问题 - 当我的IP发生变化时,服务器应用程序会自动关闭。我不确切知道发生了什么,因为关机时间是下午,我在我的办公室,但我注意到另一个结果:即使我在我的应用程序层协议中使用了心跳,服务器也没有发现保持活动失败 - 因为我在服务器上的日志文件中记录了所有内容,但没有找到它。因此,当我的IP发生变化时,我的服务器必须立即关闭,甚至没有达到保持活动的逻辑。
这看起来很奇怪,套接字错误(由于IP更改)如何直接导致整个应用程序关闭?如果有人有任何解释,以及如何处理这个问题,谢谢
答案 0 :(得分:1)
打开套接字后,其绑定的IP地址永远不会改变。这不能在服务器端“修复”。我建议处理服务器稳定性,客户端也应检测到服务器不再存在于给定的IP地址,然后重新连接。 (这与服务器不可用的原因无关 - 重启服务器是正常的。)