0

我正在用 java 编写一个自定义 IRC 客户端,我在聊天中接收消息很好,但我不知道如何发送聊天消息。我查看了 IRCHelp.org,但我并不真正理解“伪 BNF 中的消息格式”部分,我相信这是我可能正在寻找的部分。

  1. 这是我要找的部分吗?

  2. 如果不是,我应该看哪个部分?

4

3 回答 3

0

查看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 协议可能很困难:

  • 您要么必须跟踪频道中的所有用户并更改用户的客户端视图 a JOINPART和(QUIT KICKNICK解析NAMES您加入时的回复,或者每次您需要NAMES该频道中的用户列表时询问服务器。对于您必须跟踪它的客户端(显示用户列表)。
  • IRC 颜色:有人说这是在客户端 (mIRC) 中实现的最糟糕的想法,但它们存在并且大多数客户端都支持它们。如果您不这样做,请剥离它们(它们以\x02and开头\x03
  • CTCP支持 CTCP 很重要:
    • 有些服务器在连接时要求VERSION回复,有些服务器甚至不允许没有连接的客户端。
    • ACTIONctcps 很常见,用于 /me 命令。
    • DCCctcps 很常见,用于文件传输、建立直接聊天连接和发送加密消息。
  • 为用户提供一种注入任意命令的方法。大多数客户端支持使用/rawor /quote,有些甚至将每个未知命令发送到服务器。
  • /kick为, /op...提供通用别名
于 2013-09-20T13:24:01.087 回答
0

我不知道您是在要求 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
于 2013-09-30T13:25:55.280 回答
-1

我认为您最好的选择可能是使用 IRC 库。IRC 协议相当简单但同时也很大,编写一个完整的库实际上是一项相当大的工作。另一方面,由于 IRC 是基于文本的协议,因此很容易自己编写。

你为什么不看看其中之一:

如果你确定要自己编写实现,你可以看看这个

于 2013-09-20T13:30:20.960 回答