我正在java中创建一个irc客户端。起初,我为每个要连接的通道使用了一个套接字,例如:
String server = " ircServer " ;
int port = " 6667 " ;
Channellist String [ ] = { " channel 1 " , " Canal2 " " canal3 " , ...} ;
for ( String s : channellist ) {
Socket socket = new Socket (server , port ) ;
InputStreamReader InputStreamReader = new InputStreamReader ( socket.getInputStream ());
OutputStreamWriter OutputStreamWriter = new OutputStreamWriter ( socket.getOutputStream ());
// ... Code to connect the channel
}
但是这种方法在某些服务器上不起作用,因为它们声称来自同一IP的许多连接,这是由于使用了几个实例化的套接字。
所以,我想知道,我如何将N InputStreamReader和OutputStreamWriter与同一个套接字一起使用,以防止与服务器的过多连接。谢谢。
答案 0 :(得分:1)
您不应该在同一个套接字中使用多个读取器/写入器。想象一下,尝试使用一部手机进行多次对话。
单个连接就足够了,IRC协议将其复用以处理与不同通道之间的通信。发送消息命令毕竟是/msg <channel> <msg>
,允许您从单个作者发送到任意数量的频道。
答案 1 :(得分:0)
尝试使用java nio频道。他们可以解决你的问题
答案 2 :(得分:0)
Kayaman,谢谢你的回答。要发送消息,我得到它,但想使用相同的InputStreamReader和OutputStreamWriter加入多个通道。例如, 在上面的代码之后,它执行以下代码:
BufferedReader reader = new BufferedReader ( this.inputStreamReader ) ;
BufferedWriter writer = new BufferedWriter ( this.outputStreamWriter ) ;
writer.write ( " NICK " + " myNickName " + "\ r \ n");
writer.write ( " JOIN" + " ircChannel " + "\ r \ n");
writer.flush ();
String line = null;
while ( (line = reader.readLine ( ) ) ! = null)
System.out.println (line ) ;
通过作者我可以加入频道,而读者我可以听到频道中发生的事情。那么我该如何连接到多个频道并全部收听呢?
非常感谢。