【发布时间】:2016-10-20 16:07:16
【问题描述】:
我开发了一个基于套接字的客户端/服务器应用程序。
客户端在 Delphi 中。服务器端在 IBM I (as400) 上
有时,客户端和服务器会断开连接。我不太确定为什么,但我认为这是因为它们之间的一台机器(代理、路由器、防火墙)发送了一个RST 数据包。
无论如何,我正在尝试使用服务器上的相同进程重新连接客户端。 (不是另一个,相同,这很重要)。
为此,我从客户端创建了一个新连接。所以,我在服务器上有两个进程。我将它们称为“LostProcess”和“HelperProcess”。
LostProcess 正在等待数据队列中的数据。
客户端告诉 HelperProcess 它已连接到 LostProcess。
HelperProcess 将数据发送到 LostProcess(通过数据队列)。
HelperProcess 生成一个 giveDescriptor,而 LostProcess 生成一个 takeDescriptor。
然后 HelperProcess 停止,LostProcess 向客户端发送数据(说“我回来了”)。
到目前为止,它可以工作,但是当客户端发送数据时,LostProcess(我们现在可以称之为 RebornProcess)永远不会收到它们(我试图不停止 HelperProcess,并且他是接收数据的人)。
使用 Wireshark,我可以看到客户端使用不同的本地端口发送数据,所以我猜这就是 RebornProcess 没有收到它们的原因。
我试图强制新客户端socket的本地端口和第一个一样,但是然后新客户端socket有一段时间无法连接,如果我等待的时间足够长,我也遇到了和以前一样的问题.
有人知道如何使重新连接工作吗?
【问题讨论】:
-
除非您说数据已成功发送和接收,除非它是由
HelperProcess接收的,否则我无法理解这个问题。这是有道理的。只要 HelperProcess 继续为数据队列提供服务,那么发送的数据就有可能在此处结束。完全按照设计。
标签: sockets delphi ibm-midrange