我正在用 java 编写一个自定义 IRC 客户端,我在聊天中接收消息很好,但我不知道如何发送聊天消息。我查看了 IRCHelp.org,但我并不真正理解“伪 BNF 中的消息格式”部分,我相信这是我可能正在寻找的部分。
这是我要找的部分吗?
如果不是,我应该看哪个部分?
查看RFC 1459。
它也使用伪BNF,但实际上很容易理解。
例子:
4.4.1私信
命令:
PRIVMSG
参数:<receiver>{,<receiver>} <text to be sent>
PRIVMSG 用于在用户之间发送私人消息。是消息接收者的昵称。也可以是用逗号分隔的名称或频道列表。
该参数也可以是主机掩码 (#mask) 或服务器掩码 ($mask)。在这两种情况下,服务器只会将 PRIVMSG 发送给那些拥有匹配掩码的服务器或主机的人。掩码必须至少有 1(一)个“。” 在其中并且最后一个“。”之后没有通配符。存在此要求是为了防止人们向“# ”或“$ ”发送消息,这些消息会广播给所有用户;从经验来看,这是滥用而不是负责任和适当地使用。通配符是 '*' 和 '?' 人物。PRIVMSG 命令的此扩展仅对操作员可用。
数字回复:
ERR_NORECIPIENT ERR_NOTEXTTOSEND ERR_CANNOTSENDTOCHAN ERR_NOTOPLEVEL ERR_WILDTOPLEVEL ERR_TOOMANYTARGETS ERR_NOSUCHNICK RPL_AWAY
例子:
:Angel PRIVMSG Wiz :Hello are you receiving this message ?
;从天使到 Wiz 的消息。
PRIVMSG Angel :yes I'm receiving it !receiving it !
给天使留言。
PRIVMSG jto@tolsun.oulu.fi :Hello !
向服务器上的客户端发送消息
请注意,实现 IRC 协议可能很困难:
JOIN
、PART
和(QUIT
KICK
并NICK
解析NAMES
您加入时的回复,或者每次您需要NAMES
该频道中的用户列表时询问服务器。对于您必须跟踪它的客户端(显示用户列表)。\x02
and开头\x03
)VERSION
回复,有些服务器甚至不允许没有连接的客户端。ACTION
ctcps 很常见,用于 /me 命令。DCC
ctcps 很常见,用于文件传输、建立直接聊天连接和发送加密消息。/raw
or /quote
,有些甚至将每个未知命令发送到服务器。/kick
为, /op
...提供通用别名我不知道您是在要求 IRC RFC/协议帮助还是实际代码,因为您没有提供任何当前代码。当您建立到服务器的读取流时,将所有内容输出到您的控制台。有很多事情要处理,但这样做会非常清楚协议的工作原理。至于协议中的一些代码:
BufferedWriter writer = new BufferedWriter(new InputStreamReader(socket.getInputStream());
writer.writeLine("PRIVMSG <destination> :<message>\r\n");
writer.flush();
显然以上需要一个 try-catch。
接收来自用户的私人消息将采用以下格式:
:<sender-nickname>!<sender-ident>@<sender-server> PRIVMSG <your-nickname> :<the-senders-message>
例子:
:StephenHero!SHPC@google.com PRIVMSG Mast3rPlan :Hello Master Plan!
许多 IRC 服务器响应命令都遵循这种语法,[换句话说]:
:SENDER COMMAND RECIPIENT :MESSAGE
我认为您最好的选择可能是使用 IRC 库。IRC 协议相当简单但同时也很大,编写一个完整的库实际上是一项相当大的工作。另一方面,由于 IRC 是基于文本的协议,因此很容易自己编写。
你为什么不看看其中之一:
如果你确定要自己编写实现,你可以看看这个。