has una tabla de mensajes en el servidor, si el usuario se conecta, y se mantiene conectado, si se recibe un mensaje de conexión, revisar si el usuario de ese nombre está vivo (responde a un mensaje de "estás ahí?") si vive, ignora el mensaje, si no, desconectalo y conecta al nuevo usuario...
ve así... puedes por seguridad apartar los primeros x bytes para prefijar todo ej, apartas 4 bytes
"cmmd" significa que lo que viene es un comando
"msag" significa que lo que viene es un mensaje
"conn" significa que lo que viene es una conexion
"ping" el cliente responde con un "pong" para saber que está viva la conexion
"ackn" es un "ok" una confirmacion a lo ultimo recibido
entonces seria algo como (viendo desde el servidor "<" recive, ">"manda)
<connPepito //pide conexion
>cmmdConectado //se indica que fue conectado
<ackn //confirma la conexion
>ping //ping para medir la latencia
<pong //repsuesta a ping
<cmmdEntrarChat //pide entrar al chat
>ackn //confirma
<msagHola a todos //servidor recibe el mensaje "Hola a todos"
>msagPablo: Hola //sertvidor envia mensaje "Pablo: Hola" de otro usuario
y así vas... es util tener las confirmaciones de operacion para saber que todo funciona bien y un ping para saber que el cliente vive... para todo mensaje solo sacas los primeros 4 bytes y decides que hacer (si es comando, mensaje, o que)
siempre verificar los comandos para evitar un ataque