I’m trying to create a server for my Chat program but for some reason it just takes input and will keep doing it even when you press enter over and over. I am trying to run the server only in the command line so this makes it impossible to give the server some commands. Does anyone know why it’s doing this?
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;
public class Server {
ArrayList<PrintWriter> clientOutputStreams;
int port;
ServerSocket serverSocket;
public class ClientHandler implements Runnable {
BufferedReader reader;
Socket socket;
public ClientHandler(Socket clientSocket) {
try {
socket = clientSocket;
InputStreamReader isReader = new InputStreamReader(socket.getInputStream());
reader = new BufferedReader(isReader);
} catch (Exception ex) {
ex.printStackTrace();
}
}
@Override
public void run() {
String message;
try {
while ((message = reader.readLine()) != null) {
tellEveryone(message);
System.out.println(message);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
public static void main(String args[]) {
new Server().go();
}
public void createSocket() {
try {
port = 31996;
serverSocket = new ServerSocket(port);
} catch (Exception e) {
System.out.println("The port is in use or does not exist! Please pick an unused port between 1025 and 65535.");
createSocket();
}
}
public void go() {
clientOutputStreams = new ArrayList<PrintWriter>();
try {
createSocket();
while (true) {
Socket clientSocket = serverSocket.accept();
PrintWriter writer = new PrintWriter(
clientSocket.getOutputStream());
clientOutputStreams.add(writer);
Thread t = new Thread(new ClientHandler(clientSocket));
t.start();
System.out.println("Server started on port " + port+ ".");
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void tellEveryone(String message) {
Iterator<PrintWriter> it = clientOutputStreams.iterator();
while (it.hasNext()) {
try {
PrintWriter writer = (PrintWriter) it.next();
writer.println(message);
writer.flush();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
I’d imagine that this condition
while ((message = reader.readLine()) != null)is never been meet.You need send the a “terminate” message of some kind or have the client close the connection.