Compartir a través de


Windows Sockets: Uso de la clase CAsyncSocket

En este artículo se explica cómo usar la clase CAsyncSocket. Esta clase encapsula la API de Windows Sockets en un nivel muy bajo. CAsyncSocket se destina al uso de los programadores que conozcan las comunicaciones de red en detalle, pero que quieran la comodidad de las devoluciones de llamada para la notificación de eventos de red. En función de esta suposición, este artículo solo proporciona instrucciones básicas. Es probable que considere la posibilidad de usar CAsyncSocket si desea que Windows Sockets pueda trabajar con varios protocolos de red en una aplicación MFC, pero no desea sacrificar la flexibilidad. También podría sentir que puede obtener una mejor eficiencia si usted programa directamente las comunicaciones que al usar el modelo alternativo más general de la clase CSocket.

CAsyncSocket está documentado en Referencias de MFC. Visual C++ también proporciona la especificación de Windows Sockets, que se encuentra en Windows SDK. Los detalles quedan a su cargo. Visual C++ no proporciona una aplicación de ejemplo para CAsyncSocket.

Si no tiene conocimientos sobre las comunicaciones de red y desea una solución sencilla, use la clase CSocket con un CArchive objeto . Consulte Windows Sockets: Uso de sockets con archivos para más información.

Este artículo trata sobre:

Creación y uso de una CAsyncSocket

Para usar CAsyncSocket

  1. Construya un objeto CAsyncSocket y use el objeto para crear el identificador SOCKET subyacente.

    La creación de un socket sigue el patrón de MFC de construcción en dos fases.

    Por ejemplo:

    CAsyncSocket sock;
    sock.Create(); // Use the default parameters
    

    O bien

    CAsyncSocket *pSocket = new CAsyncSocket;
    int nPort = 27;
    pSocket->Create(nPort, SOCK_DGRAM);
    

    El primer constructor anterior crea un CAsyncSocket objeto en la pila. El segundo constructor crea un CAsyncSocket en el montón. La primera Create llamada anterior usa los parámetros predeterminados para crear un socket de flujo. La segunda Create llamada crea un socket de datagrama con un puerto y una dirección especificados. (Puede usar cualquiera de las Create versiones con cualquier método de construcción).

    Los parámetros para Create son:

    • Un "puerto": un entero corto.

      Para un socket de servidor, debe especificar un puerto. En el caso de un socket de cliente, normalmente acepta el valor predeterminado de este parámetro, lo que permite que Windows Sockets seleccione un puerto.

    • Tipo de socket: SOCK_STREAM (valor predeterminado) o SOCK_DGRAM.

    • Un socket de "dirección" como "ftp.microsoft.com" o "128.56.22.8".

      Esta es su dirección ip (Protocolo de Internet) en la red. Probablemente siempre se basará en el valor predeterminado de este parámetro.

    Los términos "puerto" y "dirección de socket" se explican en Windows Sockets: Puertos y direcciones de socket.

  2. Si el socket es un cliente, conecte el objeto socket a un socket de servidor mediante CAsyncSocket::Connect.

    O bien

    Si el socket es un servidor, establezca el socket para empezar a escuchar (con CAsyncSocket::Listen) en los intentos de conexión desde un cliente. Después de recibir una solicitud de conexión, acepte con CAsyncSocket::Accept.

    Después de aceptar una conexión, puede realizar tareas como validar contraseñas.

    Nota:

    La Accept función miembro toma una referencia a un nuevo objeto vacío CSocket como parámetro. Debe construir este objeto antes de llamar a Accept. Si este objeto de socket sale del ámbito, la conexión se cierra. No llame a Create para este nuevo objeto de socket. Para obtener un ejemplo, consulte el artículo Windows Sockets: Secuencia de operaciones.

  3. Lleve a cabo comunicaciones con otros sockets al llamar a las funciones miembro del objeto CAsyncSocket que encapsulan las funciones de la API de Windows Sockets.

    Consulta la especificación y la clase CAsyncSocket de Windows Sockets en la referencia de MFC.

  4. Destruye el CAsyncSocket objeto.

    Si creó el objeto de socket en la pila, se llama a su destructor cuando la función contenedora sale del ámbito. Si ha creado el objeto de socket en el montón, con el operador new, es responsable de usar el operador delete para destruir el objeto.

    El destructor llama a la función miembro del objeto Close antes de destruir el objeto.

Para obtener un ejemplo de esta secuencia en el código (en realidad para un CSocket objeto), vea Windows Sockets: Secuencia de operaciones.

Sus responsabilidades con CAsyncSocket

Al crear un objeto de clase CAsyncSocket, el objeto encapsula un identificador de Windows SOCKET y proporciona operaciones sobre ese identificador. Al usar CAsyncSocket, debe enfrentar todos los problemas que podrían surgir si utiliza la API directamente. Por ejemplo:

  • Escenarios de "bloqueo".

  • Diferencias de orden de bytes entre las máquinas de envío y recepción.

  • Conversión entre cadenas de juego de caracteres multibyte (MBCS) y Unicode.

Para obtener definiciones de estos términos e información adicional, vea Windows Sockets: Blocking, Windows Sockets: Byte Ordering, Windows Sockets: Converting Strings.

A pesar de estos problemas, la clase CAsyncSocket puede ser la opción adecuada para usted si la aplicación requiere toda la flexibilidad y el control que puede obtener. Si no es así, considere la posibilidad de usar la clase CSocket en su lugar. CSocket le oculta muchos detalles: bombea mensajes de Windows durante las llamadas de bloqueo y le da acceso a CArchive, que administra las diferencias de orden de bytes y la conversión de cadenas por usted.

Para obtener más información, consulte:

Consulte también

Windows Sockets en MFC