Terminal Server y Sockets

ninjachu

Hola,
me gustaría crear un sistema de mensajería entre aplicaciones cliente y una servidora que gestiona los mensajes.
Había pensado que el servidor comunica los mensajes a los clientes mediante socket de la siguiente manera:

Cliente.exe Cliente.exe Cliente.exe
\ | /
msg1 msg2 msg3
\ | /
Servidor.exe

Todo funciona correctamente cuando son clientes independientes ya que la Ip cambia y el puerto siempre es el mismo. El problema llega cuando se trabaja en terminal server y cada cliente tiene la misma IP ya que están conectados al mismo servidor.

Mi duda es si existe alguna manera de identificar al cliente que tengo que mandar el mensaje sin tener que especificar a cada uno un puerto especifico?

Gracias

radykal

Crea algún identificador único de cada cliente cada vez que arranques la aplicación, con algún generador de cadenas y lo envias como encabezado de cada mensaje, así el servidor siempre tiene identificados cada cliente por ese identificador y no por su IP

1 respuesta
ninjachu

#2 Gracias por responder, pero cuando el servidor envie el mensaje a que socket lo envía? a todos y luego cada uno lo filtra por su identificador único? esto no genereraría mucha carga si hay bastantes clientes?

1 respuesta
Soltrac

#3 El servidor guarda en memoria quien es quien, así escoge a quien enviarlo.

radykal

Cuando un cliente establece la conexión con el servidor y le envía su identificador el servidor puede guardar la relación socket-identificador para conexiones posteriores.

kraneok

#1 Lo idóneo es que cada cliente sea registrado como único, ya sea por nombre o por algún otro atributo de clase. Luego utilizas un ArrayList clientes y ahí es donde buscas y sacas al cliente a quien enviar.

Usuarios habituales

  • kraneok
  • radykal
  • Soltrac
  • ninjachu