【问题标题】:PHP IRC bot connect?PHP IRC 机器人连接?
【发布时间】:2012-03-04 02:36:31
【问题描述】:

我需要一些关于我正在创建的 IRC 机器人的帮助(非常简单)。

<?php

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$yonk = socket_connect($sock, "127.0.0.1", 6667);

$wut = socket_read($sock, 1024);
socket_write($sock, "NICK FikesPHPThingy\r\n");
socket_write($sock, "USER fikeh fikeh fikeh :Fike's PHP thang.\r\n");
socket_write($sock, "JOIN #LightSpike\r\n");

echo $wut;

while (True) {

}
?>

它连接并读取

:de.blank.net NOTICE Auth :*** Looking up your hostname...
:de.blank.net NOTICE 00AAAAAZ4 :*** Skipping host resolution (disabled by server administrator)

但在那之后它什么也没做。我自己创建这个没有任何教程。但我似乎无法让它工作。有什么想法吗?

PS:对于奇怪的变量名称,我们深表歉意。

【问题讨论】:

  • 你期望它做什么?为什么?

标签: php irc


【解决方案1】:

您必须将(阻塞)读取放入您的无限循环中,如下所示:

while (True) {
$wut = socket_read($sock, 1024, PHP_NORMAL_READ); // $wut will now be a single line sent by the server
echo $wut; // Do anything with the line
}

这样,您的客户端将继续等待和处理响应消息,直到套接字失去连接或您手动中断循环。我添加了PHP_NORMAL_READ 参数,因此客户端一次只能读取一行,这对于处理可能更实用。

在相关说明中,您不应立即加入频道,而应等待001 响应代码。这可确保服务器已接受您的身份证明并准备好接收命令。按照您现在的操作方式,JOIN 可能(并且可能会)被服务器拒绝。

【讨论】:

  • 谢谢,我会试试看 :) 是否有任何关于响应代码等的文档?我快速浏览了 RFC,但并没有真正找到太多。
  • @Fike:RFC 1459(部分过时)和 RFC 2812 应该包含您需要的大部分信息,尽管其中没有描述协议的非官方扩展。不过,RFC 可能有点难以理解,并且还有其他关于特定主题的资源可以派上用场。一个例子是this list of response codes。您可以通过在网络上搜索找到更多信息,但请注意并非所有内容都是最新的。
猜你喜欢
  • 2012-07-28
  • 2011-01-21
  • 2015-02-09
  • 2015-02-21
  • 2018-12-31
  • 2017-05-13
  • 1970-01-01
  • 2015-01-27
  • 2014-07-15
相关资源
最近更新 更多