TIdTCPServer - 意外断开连接等待重新连接

时间:2013-12-02 19:31:26

标签: delphi indy delphi-6

我有几个使用带有Indy组件的Delphi 6编写的程序,并试图找到一种方法来保持TCP连接,以防意外断开连接。

我们通过TCP连接到我们工厂车间的PLC,无论出于何种原因(操作员弄乱他们不应该做的事情,开关暂时停机,电线故障或任何情况),连接都会结束。

这导致我们的程序难以锁定。一旦PLC和PC之间发生断开连接,程序将停留很短的时间并最终锁定。

有没有办法在PLC和PC断开连接时保持连接,并重新建立连接而不锁定程序?

也许也有办法用TIdTCPClient做到这一点?

如果我需要更具描述性,请说出来,我会尽力。

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  i : Integer;
begin

begin
if NOT  IdTCPServer1.Active   then exit;
try

   Comm_Status  :=  True;

 {************************************************
    Clear PC Buffer before Read
  ************************************************}
 for i := 0 to giBufferSize -1 do  begin
     gabToPCBuffer[i] := 0;
 end;

 {************************************************
            Recieve the buffer from PLC
  ************************************************}
    // WE READ
     AThread.Connection.ReadBuffer(gabToPCBuffer, giBufferSize);

     StateMachineLogic;      //Sort Through buffer and copy to server buffer

     // WE SEND back to PLC
     AThread.Connection.WriteBuffer(gabToPLCBuffer, giBufferToPLC );





except
    //;
end;
end;
end;

1 个答案:

答案 0 :(得分:0)

如果与客户端的TCP服务器连接正常与客户端断开连接,则会触发OnDisconnect事件。您的线程也会被标记为已终止,因此您应该在循环中检查这一点。

但是,对于非正常断开连接,TCP服务器将在下次读取或写入时立即出错。您已将读取和写入包装在空的try...except块中。相反,你应该处理错误并摆脱循环。

对于Delphi 6,您应该将Indy组件更新到最新的Indy v9版本。