Initializing BufferedReader and DataOutputStream in infinite loop
At the very least use a try-with-resources: 

while (true) {
    try(BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())),
            DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream())){
        //... Do read/write stuff
    }
}


Then when the loop body is done (by normal control flow or by exception) the streams will be closed normally.

However if you want a lot of clients connecting at a time and you want them all to be able to interact at the same time you will need to delve into the async IO in the java.nio.channels package.