更改: 我已经确定问题与编码无关。然而问题仍然存在,因为这似乎是由IRC造成的,我仍然在寻找原因。
我正在连接的服务器使用两种PING请求:
连接到服务器时会询问一个,它的字母数字值为8个字符。
示例:PING :EA0E9275.
另一个是在服务器发出MOTD,加入频道后,完成“End of / NAMES list”。然后在“n delay”服务器向我发送一个ping请求,当前连接的主机为其值。
示例:PING :irc.ams.nl.euirc.net
如果我在回复主机PING请求之前发送命令“QUIT:Quit Message”,服务器将忽略QUIT消息,而是退出服务器填写状态消息,类似于“Client Exited”消息。
示例:ERROR :Closing Link: Nick[IP.ADD.RE.SS] (Life is too short...)
但是,如果我在响应主机PING请求后发送相同的命令,我的QUIT将按原样处理。
示例:ERROR :Closing Link: Nick[IP.ADD.RE.SS] (Quit: Quit Message)
我已经检查了RFC,并在QUIT部分找到了这个:
如果由于某些其他原因,客户端连接在没有客户端发出QUIT命令的情况下关闭(例如客户端死机并且套接字上发生EOF),则服务器需要填写某种类型的退出消息反映导致其发生的事件性质的信息。
此外,如果仍然需要查看我正在使用的部分代码来完成此任务,you can check it here。但是,这是mIRC IRC客户端的常见问题。
基本方案
答案 0 :(得分:0)
让我们回顾一下您的代码:
当我制作我的IRC机器人时,我explode()
将服务器中的字符串编辑为单词(按空格分割),然后您可以参考单词:
if ($words[0] == "PING") { reply("PONG :" . $words[1]); }
在PONG
之后立即PING
,并使用与服务器相同的消息回复。
如果满足第二个,你应该永远不会遇到服务器等待PING的问题,因为你会立即回答。客户端应该尊重服务器上的PING PONG命令,否则服务器会将其视为脱机(是的,即使您发送了其他任何内容,服务器也希望PONG)。