首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Indy's idSimpleServer重连接

Indy's idSimpleServer重连接
EN

Stack Overflow用户
提问于 2014-03-12 15:46:54
回答 1查看 313关注 0票数 0

我希望能够在一个客户端连接到idSimpleServer之后再连接到它,然后断开连接。第一个客户端可以连接和断开连接没有问题,但下一个客户端不能。我做了一个简单的测试过程来演示我的问题。

代码语言:javascript
复制
procedure Tfrmmain.btnBlockingClick(Sender: TObject);
begin
  Server1.BeginListen;
  Server1.Listen;
  CodeSite.Send(csmLevel2, 'Listen');
  CodeSite.Send(csmLevel2, 'Server1.IOHandler.Connected', Server1.IOHandler.Connected);
  try
    while (Server1.Connected) do
    begin
      while Server1.IOHandler.CheckForDataOnSource() do
      begin
        CodeSite.Send(csmLevel3, 'InputBufferAsString', Server1.IOHandler.InputBufferAsString);
        Server1.IOHandler.WriteLn('0006CANPDD');
      end;
    end;
  finally
    Server1.Disconnect;
    CodeSite.Send(csmLevel4, 'Finally');
  end;
end;

这在我的代码日志中给出了以下结果:

代码语言:javascript
复制
Listen
Server1.IOHandler.Connected = True
Finally
Listen
Server1.IOHandler.Connected = False
Finally

注意,第二个连接似乎没有正确地绑定IOHandler。不知道我该去哪找。有什么想法吗?

谢谢

史蒂夫

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-12 17:46:02

问题是每次都重用同一个TIdSimpleServer对象。

在第一个断开连接之后,将对下一个连接重用相同的IOHandler,但是IOHandler.ClosedGracefully属性从早期的连接中保持为真,因为它不是每次都被重置。ClosedGracefully属性仅由IOHander.Open()方法重置,TIdSimpleServer只在创建新的IOHandler时调用该方法。Disconnect()不释放IOHandler,但它确实调用了IOHandler.Close()

对我来说,在后续连接中缺少的对Open()的调用就像是一个bug,因此我已经为Indy的SVN (rev 5103)签了一个补丁。

您可以升级到最新SVN发行版,或者必须在每个连接之间销毁TIdSimpleServer.IOHandler (或TIdSimpleServer本身)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22356723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档