私は現在、Java で書かれた IRC クライアントに取り組んでいます。
サーバーへの接続が確立されるとすぐに、次のメッセージを送信します。
- /ニックテスト
- /JOIN #チャット
最初のテストはうまくいきました - サーバーは応答しています。しかし、それは言うたびに:
- 通知認証:***
- IDの確認
- 通知認証:***
- ID 応答なし
- エラー:リンクを閉じています... (登録がタイムアウトしました)
少し役立つ関連する質問を見つけました。ポート 113 でリッスンして、IRC サーバーからの接続とメッセージを受信して応答する必要があると表示されます。そのポートでリッスンする ServerSocket を実装しましたが、サーバーはポート 113 で接続を開こうとしません。何が間違っていますか?
コードは次のとおりです。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class IdentProtocolThread extends Thread {
private String nick;
private ServerSocket serverSocket;
private BufferedReader reader;
private BufferedWriter writer;
public IdentProtocolThread(String nick) throws IOException {
this.nick = nick;
this.serverSocket = new ServerSocket(113);
}
@Override
public void run() {
try {
System.out.println("waiting for incoming socket");
Socket socket = this.serverSocket.accept();
System.out.println("socket accepted");
this.initialize(socket);
System.out.println("reader/writer initialized");
String line = null;
while ((line = this.reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("done");
}
private void initialize(Socket socket) throws IOException {
this.reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
this.writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
}
}
実行すると、これだけが表示されます:
着信ソケットを待機中
ident チェックを回避するために、他のメッセージを送信する必要がありますか?