socket servidor que funcion comando cliente c++ sockets client server

c++ - servidor - Mensajes de cliente a cliente en la programación del socket



socket en c++ cliente servidor linux (3)

Estoy trabajando en un proyecto que es una aplicación cliente-servidor basada en WinSock en C ++. Hice todo lo necesario para comunicarme entre el servidor y el cliente y puedo enviar y recibir mensajes entre ellos.

Ahora necesito saber cómo lograr la parte de mensajería de cliente a cliente y cómo debe hacerse el trabajo. Solo sé que, por ejemplo, si el Cliente A y el Cliente B necesitan comunicarse entre sí, el cliente A debe enviar el mensaje al servidor, el servidor recibe el mensaje y lo envía al cliente B.

Si este es el enfoque adecuado, ayúdenme a saber cómo debe saber el servidor algo del receptor (que es el Cliente B en este caso).

Por favor, avíseme si no he explicado claramente mi problema.

Cualquier ayuda es apreciada.


  1. El cliente A habla con el servidor.
  2. El cliente B habla con el servidor.
  3. El servidor determina que A necesita hablar directamente con B y viceversa.
  4. El servidor envía A y B un mensaje que contiene detalles de cómo comunicarse entre sí (dirección IP, puertos, etc.). El mensaje también detalla qué (A o B) iniciará el contacto, los tiempos de espera, etc.
  5. Al recibirlos, cada A y B comienzan a escuchar en los puertos detallados por el servidor.
  6. Quien fue configurado en el mensaje para iniciar el contacto, lo hace (A habla con B o viceversa).

A menos que me haya perdido totalmente el sentido de la pregunta. Debe definir un par de mensajes nuevos con todos los detalles necesarios para que A y B lo hablen y enviarlo a A y B, y deben recibir / procesar el mensaje y reaccionar en consecuencia.


Piense en la comunicación cliente-servidor como una antigua comunicación por radio.

  1. A necesita hablar con B, por lo que B debe estar escuchando
  2. A termina su discurso (solo envía una palabra clave, algo así como ''// EOC'', o usa un ancho fijo para los mensajes).
  3. B necesita hablar con A, entonces A no debe hablar, dejar que B hable con A

iterar hasta el comando de fin de comunicación

entonces imagina que hablar es write , y escuchar es read

B: read -> A: write A: read -> B: write

recuerde usar una palabra clave para desconectar los 2 clientes, o podría tener un mal comportamiento de las llamadas al sistema


Una forma de lograr esto es hacer que uno de los clientes actúe como servidor después de una comunicación sobre el servidor real. Necesitas crear un protocolo tuyo. Habiendo dicho eso:

1- Cliente A: -Hey, servidor !. Dile al Cliente B que cree un servidor de comunicaciones para que pueda comunicarme directamente con él.

2- Servidor: -Hey, Cliente B !. Inicie una instancia de servidor y dígame las propiedades de conexión para que pueda retransmitirlo al Cliente A, para que pueda conectarse con usted.

3- Cliente B: -Oye, ¡Servidor !. Estoy listo para aceptar la solicitud de conexión para el Cliente A. Aquí están mis propiedades de conexión ...

4- Servidor: -Cliente A !! Aquí las propiedades de conexión del Cliente B. Tómalo o déjalo ... Ya terminé ...

5- Cliente A: "¡Oye, servidor B! ¿Puedo conectarme? ...

Ese es el protocolo ... Entonces, cualquier cliente primero inicia una solicitud al servidor que incluye el tipo de mensaje "yo, solicitando conectarse al cliente x ...". El servidor ordena al cliente x, las respuestas del cliente x, el servidor transmite la respuesta al cliente iniciador ... Y también debe implementar las instrucciones de error, políticas de denegación u otras cosas que se le ocurran para gestionar todo el protocolo.