java - 如何使用同一个Socket来多个InputStreamReader和OutputStreamWriter

标签 java sockets

我正在用 java 创建一个 irc 客户端。首先,我为每个要连接的 channel 使用一个套接字,例如:

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,防止与服务器的过多连接。谢谢。

最佳答案

您不应该在同一个套接字中使用多个读取器/写入器。想象一下尝试使用一部手机进行多个对话。

单个连接就足够了,IRC 协议(protocol)复用该连接来处理与不同 channel 的通信。发送消息命令毕竟是/msg <channel> <msg>允许您从单个作者发送到任意数量的 channel 。

关于java - 如何使用同一个Socket来多个InputStreamReader和OutputStreamWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39455755/

相关文章:

java - PdfBox 2.0.0 在页面给定位置写入文本

objective-c - Objective-C/Cocoa 中客户端-服务器通信的方法

python - Python中的socket编程——实际的远程端口

c++ - 由于错误代码10093,C++程序无法连接到服务器

java - 如何在 Java 中序列化 Microsoft Office 对象?

java - 安排在轮询情况下可能超时的可调用对象的最佳方法是什么?

java - 部署到 Web 服务器时 MySQL JDBC 连接失败

java - 使用线程执行完成返回的值填充 Spring 模型属性

python - celery :socket.error 超时

ruby - Ruby 和 Net::SCP 传输(套接字)的性能问题