El Simple Chat Protocol (SCP) define cómo un cliente y un servidor de chat intercambian mensajes.
Es un protocolo basado en texto, lineal, y separado por saltos de línea (\n).
Cada mensaje siempre empieza por la línea:
SCP
El protocolo es síncrono por solicitud-respuesta para acciones del cliente, pero asíncrono para notificaciones y mensajes entrantes.
Todos los mensajes siguen esta estructura:
SCP
<COMANDO>
<CONTENIDO_OPCIONAL>
El servidor puede responder también con:
SCP
OK
<INFO_OPCIONAL>
o
SCP
ERR
<MOTIVO>
- El cliente abre un socket TCP.
- Se establece TLS sin validación estricta del certificado.
- Tras conectarse, queda listo para recibir un mensaje con el nombre de usuario.
- El servidor verifica el nombre de usuario, y si es valido, el servidor queda listo para recibir mensajes del cliente.
(Obligatorio) Inicia sesión con un nombre de usuario.
SCP
HELLO
<username>
Respuesta esperada:
- En caso de éxito:
SCP OK - En caso de error:
SCP ERR <mensaje_de_error>
Solicita la lista de usuarios conectados.
SCP
LIST
Respuesta:
SCP
OK
user1,user2,user3
Envía un mensaje a todos los usuarios.
SCP
SEND
<mensaje>
Respuesta (siempre OK, a menos que falle el formato):
SCP
OK
Envía un mensaje privado (whisper) a un usuario:
SCP
SENDTO
<username>:<mensaje>
Si el usuario no existe:
SCP
ERR
User not found
Si es correcto:
SCP
OK
Finaliza la sesión del cliente.
SCP
END
El servidor responderá:
SCP
END
Y cerrará la conexión.
El servidor puede enviar mensajes en cualquier momento.
Usadas para avisos generales (ej: usuarios conectados/desconectados).
SCP
NOTIFY
<texto>
Cuando otro usuario envía un mensaje público:
SCP
BROADCAST
<sender>:<mensaje>
Envío de mensajes dirigidos solo al cliente:
SCP
WHISPER
<sender>:<mensaje>
Cuando el servidor decide terminar la conexión:
SCP
END
El cliente debe cerrarse inmediatamente.
| Estado | Descripción |
|---|---|
| Desconectado | No hay socket establecido. |
| Conectado | TCP/TLS activo. |
| Logueado | Se ha enviado HELLO y recibido OK. |
El cliente solo puede enviar SEND, SENDTO, LIST si está en estado Logueado.
| Error | Causa |
|---|---|
ERR Invalid username |
Username vacío o inválido. |
ERR User not found |
Whisper a un usuario inexistente. |
ERR genérico |
Error interno en el servidor o formato incorrecto. |
SCP
HELLO
Alice
SCP
OK
SCP
SEND
Hola a todos!
SCP
BROADCAST
Alice:Hola a todos!
SCP
END
SCP
END