Protocolo UIOCPPnp
UIOCPPNP es un protocolo basado en el protocolo uPnp que permite que las aplicaciones IOCP presentes en una red se 'autoidentifiquen' y 'autoconfiguren'. La idea es que cada cliente pueda buscar el servidor que necesita sin que el usuario tenga que 'modificar' ningún fichero de configuración.
Desde hace muchos años los usuarios de simuladores de vuelo han venido pidiendo sistemas de autoconfiguración. El uIocpPnp dá respuesta a esta petición.
Cómo funciona:
1) Cada servidor o cliente que se 'conecta' a una RED (incluso en entorno de localhost), en ese instante, envía un mensaje denominado DISCOVER a toda la RED.
2) Dicho mensaje es captado por todos los clientes o servidores de dicha red compatibles con el protocolo que estén a la escucha, incluido el mismo que acaba de enviar ese DISCOVER lo recibe.
3) Como respuesta a un DISCOVER recibido, cada cliente o servidor responde con un mensaje denominado NOTIFYIN, mensaje que notifica la presencia de dicho server o cliente en la RED.
4) Cada cliente o server recibe todos los NOTIFYIN enviados, incluido el propio, y se almacenan en una lista la presencia de todos los demás...
5) Cuando un cliente o server sale de la RED, envía un único NOTIFYOUT que hace que el resto de clientes o servers quiten a ese cliente de la lista que tenían guardada.
6) Los clientes y servidores usan todos el protocolo de red UDP en el puerto 8118. Dado que varios clientes y servidores pueden estar en el mismo PC, el socket debe ser abierto con las opciones SO_BROADCAST y SO_REUSEADDR.
Existen dos mensajes adicionales, de momento en desuso, que son SETSTATUS y GETSTATUS.
Estructura de los mensajes:
DISCOVER * {VERSION}0x0d0x0a
Ejemplo: DISCOVER * UIOCPPNP/1.1\r\n
NOTIFYIN * {VERSION}\r\nModule-Type:{sType}\r\nModule-Version:{sVersion}\r\nModule-Alias:{sAlias}\r\nServer-Port:{nPort}\r\nUIocpPnp-Serial:{sSerial}\r\nOs:{sOs}\r\n
VERSION = "UIOCPPNP/1.1"
sType = String con el tipo de cliente o servidor IOCP, pj, el IOCPServer envía IOCPServer, y el GaugeComposer, envía GaugeComposer.
sVersion = Versión del servidor o cliente IOCP, Pj, el IOCPServer envía 2.3, y el GC envía 2.0
sAlias = Identificador de que está ejecutando el cliente o servidor IOCP, ej IOCPServer puede enviar FS2004 o FSX...
nServerPort = En caso de ser servidor envía aquí el nº de puerto en el que atiende al IOCP. Si es un cliente a 0.
sSerial = Tres números random de 5 dígitos (rellenos a 0) separados por guiones. Con la forma 00000-00000-00000
sSOS = Identificador de Sistema Operativo del cliente. Ver más abajo. (*)
NOTIFYOUT * {VERSION}\r\nUIocpPnp-Serial:{sSerial}\r\n
VERSION = "UIOCPPNP/1.1"
sSerial = Tres numeros random de 5 digitos (rellenos a 0) separados por guiones. Con la forma 00000-00000-00000
FINISH * {VERION}\r\n
VERSION = "UIOCPPNP/1.1"
(*) Sistema Operativo:
"%02d/%02d.%02d/%04d"
dwPlatformId =
dwMajorVersion =
dwMinorVersion =
dwBuildNumber =
OSVERSIONINFO osVersionInfo;
osVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
char sOS[20];// = "00/00.00/0000";
if (GetVersionEx(&osVersionInfo))
sprintf(sOS,"%02d/%02d.%02d/%04d",osVersionInfo.dwPlatformId,osVersionInfo.dwMajorVersion,osVersionInfo.dwMinorVersion,osVersionInfo.dwBuildNumber);
else
sprintf(sOS,"%02d/%02d.%02d/%04d",0,0,0,0);






