para hacer un servidor, tienes que saber usar Thread y la memoria dinamica( Pilas, Colas , etc.. ).
primero crearia una estructura de esta forma.
struct batalla
{
int id_1;
int id_2;
SOCKET sock_contrincante1;
SOCKET sock_contrincante2;
struct batalla* siguiente;
};
donde sock_contrincante1; y sock_contrincante2; , son los identificadores de los sockets de los contrincantees( son necesarios para enviarse informasion entre ellos ) , el id es para identificar y facilitar la busqueda de los contrincantes, y la estructura es para generar una lista enlazada, entonces cuando quiero enviar datos desde un cliente a otra pasando por el servidor( el servdor deberia tener los datos de los clientes en la estructura ), el servidor recorre la lista buscando el id del y luego el id del contrincante y envia los datos.
esa es mi idea, si tienes alguna otra duda, no dudes en preguntar ;)
suerte!!.
pd: revisa este link ( http://msdn.microsoft.com/en-us/library/ms...v=vs.85%29.aspx ) , ahi tambien tienes un ejemplo.
edit :
otra cosa, no es necesario la IP de los clientes, ya que tu te conectas al servidor y al servidor le basta con asociar los socket y luego atraves del ID del socket se envian los datos NO CON LA IP.