Проблема здесь в том, что переменные reader
и writer
не видны в то время как l oop, а только в блоке try-catch, в котором они объявлены.
Если Вы изменяете свой код следующим образом: он должен по крайней мере компилироваться (не проверял id, потому что у меня нет серверной реализации):
//Client constructor
public IRCClient(String address, int port, String nick, String login, String channel) throws IOException {//EDITED HERE added throws declaration (either do this, or catch the exceptions)
//Client constructor
public IRCClient(String address, int port, String nick, String login, String channel) throws IOException {//EDITED HERE added throws declaration (either do this, or catch the exceptions)
//Establish a connection to the host
//EDITED HERE move the declaration here to have the variables visible
BufferedWriter writer = null;
BufferedReader reader = null;
try {
socket = new Socket(address, port);
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
catch (UnknownHostException u) {
System.out.println(u);
}
catch (IOException i) {
System.out.println(i);
}
//Login to the host
try {
writer.write("NICK " + nick + "\r\n");
writer.write("USER " + login + "\r\n");
writer.flush();
}
catch (IOException i) {
System.out.println(i);
}
//Read lines from the server to make sure we are connected
String line = null;
try {
while ((line = reader.readLine()) != null) {
if (line.indexOf("004") >= 0) {
// We are logged in
break;
}
else if (line.indexOf("433") >= 0) {
System.out.println("Nickname is already in use");
return;
}
}
}
catch (IOException i) {
System.out.println(i);
}
// Join the specified channel
writer.write("JOIN " + channel + "\r\n");
writer.flush();
// Keep reading lines from the host.
while ((line = reader.readLine()) != null) {//EDITED HERE replaced read() with readLine()
if (line.toLowerCase().startsWith("PING ")) {
//Respond with PONG tro avoid being disconnected
writer.write("PONG " + line.substring(5) + "\r\n");
writer.flush();
}
else {
//Print the line received
System.out.println(line);
}
} //end while
}
Я пометил части, которые я изменил, комментарием //EDITED HERE