当前位置: 首页 > 知识库问答 >
问题:

如何使用同一个Socket将InputStreamReader和OutputStreamWriter倍增

孟安民
2023-03-14

我正在用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,防止过度连接到服务器。非常感谢。

共有3个答案

史骏祥
2023-03-14

卡亚曼,谢谢你的回答。要发送消息,我明白了,但我想使用同一个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 ) ;

有了作者,我可以加入频道,而读者,我可以倾听频道里发生的事情。那么,我该如何连接到多个频道,并收听所有频道呢?

非常感谢你。

仲孙经赋
2023-03-14

尝试使用java nio通道。愿他们解决你的问题

向苗宣
2023-03-14

不能在同一个套接字中使用多个读写器。想象一下,试着用一部手机进行几次对话。

一个连接就足够了,IRC协议将其多路复用,以处理与不同通道之间的通信。发送消息命令毕竟是/msg

 类似资料:
  • 我有两个这样的等级: 和 我想使用hibernate持久化这两个类。字段messagesOfTypeA、messagesOfTypeB和messagesOfTypeC根据消息中的类型字段对消息对象进行分组。 如何使用XML hibernate映射映射MyClass和Message之间的一对多关系?(我正在使用Hibernate 3.6)

  • 我不明白InputStream、InputStreamReader和BufferedReader到底是做什么的。它们都有一个read()方法,对于BufferedReader,还有readLine()。为什么我不能只使用InputStream或者只添加inputStreamReader呢?为什么我需要添加BufferedReader?我知道这与效率有关,但我不明白怎么做。 我一直在研究Buffer

  • 问题内容: 可以将 Spark RDD 通过管道传输到Python吗? 因为我需要一个python库来对数据进行一些计算,但是我的主要Spark项目基于Scala。有没有办法将两者混合使用或让python访问相同的spark上下文? 问题答案: 实际上,您可以使用Scala和Spark以及常规Python脚本来传递到python脚本。 test.py 火花壳(scala) 输出量 你好约翰 你好林

  • 主要内容:1 什么是Java OutputStreamWriter,2 Java OutputStreamWriter的构造方法,3 Java OutputStreamWriter的方法,4 Java OutputStreamWriter的例子1 什么是Java OutputStreamWriter OutputStreamWriter 类用于将字符流转换为字节流,使用指定的字符集将字符编码为字节。write() 方法调用编码转换器,该转换器将字符转换为字节。然后,将所得的字节存储在缓冲区中,然

  • 基本上我有: 错误:只有在显式请求批注处理时才接受类名“test” 非常感谢所有的回复:)

  • 注意:这是与Java7。此外,我没有使用JAXB从模式生成任何东西。我只/只是想使用JAXB来反序列化现有SOAP消息的片段。所以JAXB bean是"手写的"。 我试图用JAXB反序列化以下XML。我无法作为字符串访问它。相反,我是作为一个对象: 但我还想将实例整理成一个,它是属于不同名称空间的消息的一部分。 我首先尝试编写一个根本没有提到名称空间的类: 但是当我用它来尝试反序列化包含元素的对象