我需要一些我正在创建的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:抱歉奇怪的变量名称。
答案 0 :(得分:3)
你必须将(阻塞)读取放在无限循环中,如下所示:
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
可能(也可能会)被服务器拒绝。