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

时间:2013-09-20 13:12:56

标签: java sockets chat protocols irc

我正在使用java编写自定义IRC客户端,我在聊天中收到了接收消息,但我无法弄清楚如何发送聊天消息。我查看了IRCHelp.org,但我并不真正理解“伪'BNF中的消息格式”一节,我认为这是我可能正在寻找的部分。

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

  2. 如果没有,我应该看哪一节?

3 个答案:

答案 0 :(得分:0)

查看RFC 1459 它也使用伪BNF,但实际上很容易理解。

示例:

  

4.4.1私信

     
    

命令:PRIVMSG
      参数:<receiver>{,<receiver>} <text to be sent>

  
     

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

     

该参数也可以是主机掩码(#mask)或服务器     面具($ mask)。在这两种情况下,服务器只会发送PRIVMSG     对于那些拥有与掩码匹配的服务器或主机的人。面具必须     至少有一个(一个)“。”在它之后没有通配符     最后“。”存在此要求以防止人们发送消息     到“#”或“$ ”,这将播放给所有用户;从     经验,这比滥用负责任和正确使用更多。     通配符是'*'和'?'字符。这个扩展到了     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协议可能很难:

  • 您必须跟踪频道中的所有用户,并在JOINPARTQUIT KICK和{{更改用户的客户端视图1}}(并解析您的联接上的NICK回复,或者每当您需要该频道中NAMES的用户列表时询问服务器。对于客户端(显示用户列表),您必须跟踪它。
  • IRC色彩:有人说这是客户端(mIRC)中最糟糕的想法,但它们存在并且大多数客户都支持它们。如果不这样做,请将其删除(它们以NAMES\x02
  • 开头
  • CTCP 支持CTCP非常重要:
    • 有些服务器在连接时要求\x03回复,有些服务器甚至禁止没有连接的客户端。
    • VERSION ctcps很常见,用于/ me命令。
    • ACTION ctcps很常见,用于文件传输,建立直接聊天连接和发送加密邮件。
  • 为用户提供注入abitiary命令的方法。大多数客户支持使用DCC/raw,有些客户甚至会将每个未知命令发送到服务器。
  • /quote/kick ...
  • 提供常用别名

答案 1 :(得分:0)

我无法判断您是否要求提供IRC RFC /协议帮助或实际代码,因为您还没有提供任何当前代码。当您向服务器建立读取流时,将所有内容输出到控制台。有很多东西要处理,但这样做会使协议的工作原理变得非常明确。至于一些代码和协议:

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

writer.writeLine("PRIVMSG <destination> :<message>\r\n");
writer.flush();

显然上面的需要试一试

从用户接收私人消息将采用以下格式:

:<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

答案 2 :(得分:-1)

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

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

  • JerkLib - 使用NIO并且是事件驱动的
  • Sorcix' sIRC - 非常紧凑的库,使用侦听器
  • PircBot - 而不是写irc bots
  • IRClib - 整齐有序的紧凑型irc库,支持SSL

如果您确定要自己编写实现,可以查看this