Java 在自定义IRC客户端中发送聊天

Java 在自定义IRC客户端中发送聊天,java,sockets,chat,protocols,irc,Java,Sockets,Chat,Protocols,Irc,我正在用java编写一个定制的IRC客户端,我在chat中可以很好地接收消息,但我不知道如何发送聊天消息。我看了irchhelp.org,但我并没有真正理解“pseudo”BNF中关于消息格式的部分,我相信这是我可能要找的部分 这就是我要找的部门吗 如果没有,我应该看哪一部分 看这张照片。 它也使用伪BNF,但实际上很容易理解 例如: :StephenHero!SHPC@google.com PRIVMSG Mast3rPlan :Hello Master Plan! 私人信息 命令:PRIV

我正在用java编写一个定制的IRC客户端,我在chat中可以很好地接收消息,但我不知道如何发送聊天消息。我看了irchhelp.org,但我并没有真正理解“pseudo”BNF中关于消息格式的部分,我相信这是我可能要找的部分

这就是我要找的部门吗

如果没有,我应该看哪一部分

看这张照片。 它也使用伪BNF,但实际上很容易理解

例如:

:StephenHero!SHPC@google.com PRIVMSG Mast3rPlan :Hello Master Plan!
私人信息 命令:PRIVMSG 参数:{,}

PRIVMSG用于在用户之间发送私人消息。 是消息接收者的昵称。也可以 是用逗号分隔的名称或频道列表

该参数还可以指定主机掩码或服务器掩码 面具$mask。在这两种情况下,服务器将只发送PRIVMSG 对于具有与掩码匹配的服务器或主机的用户。面具必须戴上 至少有一个。在它中,并且在 最后的存在此要求是为了防止人们发送消息 to或$,将向所有用户广播;从…起 根据经验,这是滥用多于负责任和正确使用。 通配符是“*”和“?”字符。此扩展到 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 ?
);天使给魔术师的信息

PRIVMSG Angel :yes I'm receiving it !receiving it !
给安吉尔的信息

PRIVMSG jto@tolsun.oulu.fi :Hello !
发送给服务器上客户端的消息

注意,实现IRC协议可能很困难:

您要么必须跟踪频道中的所有用户,并更改用户在加入、退出、退出KICK和NICK上的客户端视图,并解析加入回复的名称,要么在每次需要该频道中的名称的用户列表时询问服务器。对于显示用户列表的客户端,您必须跟踪它。 IRC颜色:有些人说这是在客户机mIRC中实现的最糟糕的想法,但是它们存在,并且大多数客户机都支持它们。如果没有,请将其剥离,它们以\x02和\x03开头 支持CTCP的CTCP非常重要: 有些服务器要求在connect上提供版本回复,有些服务器甚至不允许没有版本回复的客户端。 动作CTCP是常见的,用于/me命令。 DCC CTCP很常见,用于文件传输、建立直接聊天连接和发送加密消息。 为用户提供一种注入特定命令的方法。大多数客户机支持使用/raw或/quote,有些客户机甚至向服务器发送所有未知命令。 为/kick、/op…提供通用别名。。。
我认为您最好的选择可能是使用IRC库。 IRC协议相当简单,但同时又很大,编写一个完整的库实际上是一项相当大的工作。另一方面,由于IRC是一种基于文本的协议,所以很容易自己编写

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

-使用NIO并且是事件驱动的 -非常紧凑的库,使用侦听器 -而不是编写irc机器人 -组织整齐的紧凑irc库,支持SSL
如果您确定要自己编写实现,可以看一看。

由于您没有提供任何当前代码,我无法判断您是在请求IRC RFC/协议帮助还是实际代码。当您建立到服务器的读取流时,将所有内容输出到您的控制台。有很多事情需要处理,但这样做将非常清楚协议是如何工作的。对于协议中的一些代码:

BufferedWriter writer = new BufferedWriter(new InputStreamReader(socket.getInputStream());

writer.writeLine("PRIVMSG <destination> :<message>\r\n");
writer.flush();
许多IRC服务器响应命令都遵循此语法,[换句话说]:

:SENDER COMMAND RECIPIENT :MESSAGE

我看了你的链接。这是一个IRC机器人。我要做的是创建一个IRC客户端。我将该代码用于服务器的输出,但我不确定如何发送聊天。我只是把聊天记录写到服务器上,还是必须对整个频道或其他内容进行保密?@SolomonKim:你想在这里保密吗。也许对你有帮助。
:SENDER COMMAND RECIPIENT :MESSAGE