2016-09-12 5 views
1

私はjavaでircクライアントを作成しています。同じソケットを複数のInputStreamReaderとOutputStreamWriterに使用する方法

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を同じソケットで使用すると、サーバーへの過剰な接続を防ぐことができます。ありがとうございました。

答えて

1

同じソケットで複数のリーダー/ライターを使用することは想定されていません。 1台の電話機で複数の会話をしようとしているとします。

1つの接続で十分であり、IRCプロトコルは、異なるチャネルとの通信を処理するためにそれを多重化します。 send messageコマンドは、すべて/msg <channel> <msg>の後で、1つのライターから任意の数のチャネルに送信できます。

0

java nioチャンネルで試してください。彼らはあなたの問題を解決するかもしれない

+0

どのように私のコンテキストは、Javaのnioチャネルを使用することができますか?私はそれを使用したことはありません。ありがとう – user2733757

0

カヤマン、答えをありがとう。メッセージを送信するには、同じ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) ; 

:たとえば、上記のコードの後 は、それがこれらのコードを実行します。だから、私は複数のチャンネルに接続し、それらのすべてを聞くにはどうすればいいですか?

ありがとうございました。

関連する問題