为啥 TIdIRC 不能连接到频道?有没有更好的组件?

Posted

技术标签:

【中文标题】为啥 TIdIRC 不能连接到频道?有没有更好的组件?【英文标题】:Why won't TIdIRC connect to channel? Is there a better component?为什么 TIdIRC 不能连接到频道?有没有更好的组件? 【发布时间】:2012-05-21 03:19:38 【问题描述】:

我一直在为 Google 的垃圾文档而苦苦挣扎,即使它可以正常连接到服务器,也无法让程序加入频道。 (它说连接到服务器)

//On Form Make
procedure TForm2.FormCreate(Sender: TObject);
  begin
   IdIRC1.Connect();
  end;

//on connected
procedure TForm2.IdIRC1Connected(Sender: TObject);
  begin
   ShowMessage('Connected to server');
   IdIRC1.Join('#TheChannel', 'password');
  end;      

一旦我关闭表单,就会出现错误提示:

Project raised exception class EIdException with message 'Not Connected'

此外,一旦连接,我可以使用哪些功能在频道上通话/检查输入? Delphi 应用程序还有哪些其他 IRC 连接选项(组件)?

我们将不胜感激,谷歌对此一无所知。 我想要的只是能够连接/检查频道聊天消息并在聊天中交谈;通过 IRC 的简单字符串 IO...

【问题讨论】:

在有人问你一些细节或发布答案之前;可以参考find here 【参考方案1】:

猜你没有满足所有的服务器要求。仅 IdIrc.Connect 是不够的,这对我有用:

FIRC.Host:= 'irc.freenode.org';
FIRC.Port := 6667;
FIRC.Username:= 'SapoIndy';
FIRC.Nickname:= 'SapoIndy';
FIRC.RealName:= 'Fabio Gomes';
FIRC.Connect;

FIRC.Join('#TheChannel');

要弄清楚发生了什么,您需要获取一些事件的输出,我已经实现了这些:

FIRC.OnStatus:= @Status;
FIRC.OnNotice:= @Notice;
FIRC.OnMOTD:= @MOTD;

搞定一些事件,你应该弄清楚服务器告诉你什么,不要反复试验。

关于发送和接收消息,我前段时间已经实现了一些,这里是项目,它是使用 Lazarus 制作的。

https://bitbucket.org/fabioxgn/irc/src/b510d73e553d/main.pas

【讨论】:

【参考方案2】:

不要在OnConnected 事件中调用Join()。该事件仅意味着建立了底层套接字连接。 Connect() 仍在运行,并且在触发OnConnected 事件时尚未真正登录到 IRC 服务器。等到Connect() 退出后再发出任何命令:

procedure TForm2.FormCreate(Sender: TObject); 
begin 
  IdIRC1.Connect; 
  ShowMessage('Connected to server'); 
  IdIRC1.Join('#TheChannel', 'password'); 
end; 

【讨论】:

以上是关于为啥 TIdIRC 不能连接到频道?有没有更好的组件?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能将 SQL Server 连接到我的节点 js

flashfxp为啥不能连接到服务器

如果我的安全组在端口 22 上允许 TCP 并且没有网络访问控制列表,为啥我不能通过 SSH 连接到我的 EC2 实例?

为啥路由器桥接成功不能上网

列出连接到 django-channels 组的用户(频道 1.x)

为啥代码有问题?我连接到集群