【问题标题】:Delphi Indy IRC德尔福印地 IRC
【发布时间】:2013-06-29 04:48:51
【问题描述】:

德尔福版本:XE2, 印地版:10.5.8.0。 我有三个程序并且一切正常,直到互联网连接丢失。什么时候会发生,然后我会尝试发送消息,然后当互联网恢复时我无法重新连接。无法关闭程序(关闭程序后不可见,但将使用 100 cpu 使用率)。如果没有“尝试,异常”,IdIRC1.Say 和 Close 上会有一个 Socket Error #1053。感谢您的帮助。

///Connection:

    procedure TForm1.Button5Click(Sender : TObject);
    begin
      try
        IdIRC1.Nickname := 'zzz';
        IdIRC1.Password := 'kkk';
        if IdIRC1.Connected then
          IdIRC1.Disconnect;
        IdIRC1.Connect;
        IdIRC1.Join('#' + edit3.Text);
      except
        ShowMessage('ggg');
      end;
    end;

///Send message:

procedure TForm1.Button3Click(Sender : TObject);
begin
 try
    IdIRC1.Say('#' + edit3.Text, edit2.Text);
    if (edit2.Text <> '') and (IdIRC1.Connected) then
    begin
      memo6.Lines.Add(edit2.Text);
      Edit2.Clear;
    end
    else
      ShowMessage('xxx');
 except
    ShowMessage('yyy');
 end;
end;



///On close:
  try
    IdIRC1.Disconnect;
  except
  end;

【问题讨论】:

    标签: delphi indy irc


    【解决方案1】:

    当你在访问连接时遇到错误,比如因为连接丢失了,你需要调用Disconnect()并且如果IOHandler.InputBuffer里面还有未读数据你需要清除它。 Disconnect() 不清除 InputBuffer,设计使然。如果InputBuffer 不为空,即使物理套接字断开,Connected() 也会返回 True。

    【讨论】:

    • idirc1.Disconnect(); IdIRC1.IOHandler.InputBuffer.Clear;使用 IdIRC1 后我仍然有 Socket Error #1053。说互联网连接丢失。
    • 在 IdIRC1 之前。说我添加了检查 Internet 是否可用的功能。上帝保佑不再有 Socket Error #1053 错误 -.-
    • 当连接丢失时,您需要断开连接然后重新连接,然后才能再次发送新数据。听起来您可能忽略了重新连接部分。
    • 是的。现在如果连接丢失,它不允许发送消息,否则程序将死。
    • @user2512579:当然,如果您提前知道连接已失效。但是不要忘记在你还不知道连接已经死掉的情况下仍然处理异常,因为连接可能在套接字操作之间死掉。
    猜你喜欢
    • 2019-03-18
    • 1970-01-01
    • 2021-02-17
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    相关资源
    最近更新 更多