Some tips you might need :
When you sending some data to the user, you might want to tell the client what type of info you are sending.
Is it a Message? Is it a Ban Message? Is it a Invite to a new Room?
So, before every message, you could have, like a integer,
If its 0 , its a message.
If its 1, its …
Heres a little example
Got from my old chat Code… Bring memories 
public void errorMessage(String message,Socket socket)
{
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
dos.writeByte(7);
dos.writeUTF(message);
byte[] msg = bos.toByteArray();
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeInt(msg.length);
//System.out.println("@Encoder/Server/Tamanho da mensagem Sendo Enviada : " + msg.length);
out.write(msg);
out.flush();
//System.out.println("@Encoder/Server/Bytes Enviados para " + socket.getInetAddress().getHostName());
} catch (Exception e) {
System.out.println("Error in Transmitter Class! (Connection lost ?)" + e.getMessage());
//e.printStackTrace();
}
}
//MessageTypeZero ::
public void defaultBlackMessage(String message, Socket socket) {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
dos.writeByte(0);
dos.writeUTF(message);
byte[] msg = bos.toByteArray();
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeInt(msg.length);
//System.out.println("@Encoder/Server/Tamanho da mensagem Sendo Enviada : " + msg.length);
out.write(msg);
out.flush();
//System.out.println("@Encoder/Server/Bytes Enviados para " + socket.getInetAddress().getHostName());
} catch (Exception e) {
//System.out.println("Error in Transmitter Class!");
//e.printStackTrace();
}
}