Compartir a través de


Windows Sockets: Usar la clase CAsyncSocket

En este artículo se explica cómo utilizar la clase CAsyncSocket. Tenga en cuenta que esta clase encapsula el Windows Sockets API en un muy bajo. CAsyncSocket es para uso de los programadores que conocen comunicaciones por red detalladamente pero desea comodidad de las devoluciones de llamada para la notificación de los eventos de la red. Según esta suposición, este artículo sólo proporciona la instrucción básica. Debería considerar probablemente utilizar CAsyncSocket si desea que la facilidad de Windows Sockets de tratar de protocolos de red en una aplicación MFC pero no desea sacrificar flexibilidad. Puede que también de que puede obtener una mejor eficacia programando las comunicaciones más directamente personalmente que podría con el modelo alternativo más general de la clase CSocket.

CAsyncSocket se documenta en la referencia de MFC. De Visual C++ también proporciona la especificación de Windows Sockets, establecida en Windows SDK. Los detalles se dejan se. Visual C++ no proporciona una aplicación de ejemplo para CAsyncSocket.

Si no está muy bien informa sobre comunicaciones por red y no desea una solución sencilla, utilice la clase CSocket con un objeto de CArchive . Vea Windows Sockets: Mediante sockets con archivos para obtener más información.

Este artículo trata:

  • Crear y con un objeto de CAsyncSocket .

  • Las responsabilidades con CAsyncSocket.

El crear y Utilizar un objeto de CAsyncSocket

Para utilizar CAsyncSocket

  1. Crea un objeto de CAsyncSocket y utilizar el objeto para crear el identificador subyacente de SOCKET .

    La creación de un socket sigue el modelo de MFC de construcción de dos pasos.

    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 objeto de CAsyncSocket en la pila. El segundo constructor crea CAsyncSocket en la pila. La primera llamada de crear anterior utiliza parámetros predeterminados para crear un socket de secuencia. La segunda llamada de crear crea un socket de datagrama con un puerto y una dirección especificados. (Puede usar cualquier versión de crear con cualquier método de construcción.)

    Los parámetros a crear son:

    • Un “puerto”: un entero corto.

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

    • Un socket tipo: SOCK_STREAM (valor predeterminado) o SOCK_DGRAM.

    • Un socket “dirección”, por ejemplo “ftp.microsoft.com” o “128.56.22.8”.

      Ésta es la dirección de (IP) de protocolo de Internet en la red. Se confía probablemente siempre en el valor predeterminado para 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, conectar el objeto de socket a un socket de servidor, mediante CAsyncSocket::Connect.

    O bien

    Si el socket es un servidor, establezca el socket para iniciar escuchando (con CAsyncSocket::Listen) para los intentos se conectan de un cliente. Al recibir una solicitud de conexión, aceptela con CAsyncSocket::Accept.

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

    Nota

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

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

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

  4. Destruya el objeto de CAsyncSocket .

    Si creó el objeto de socket en la pila, se llama al destructor cuando la función que contiene sale del ámbito. Si creó el objeto de socket en la pila, mediante el operador de new , es responsable de utilizar el operador de borrar para destruir el objeto.

    Destructor llama a la función miembro de cerrar de objeto antes de destruir el objeto.

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

El Responsibilities con CAsyncSocket

Cuando se crea un objeto de clase CAsyncSocket, el objeto encapsula un identificador de Windows SOCKET y operaciones de fuentes en ese identificador. Cuando se utiliza CAsyncSocket, debe tratar con todos los problemas que puede hacer nuevo si usó API directamente. Por ejemplo:

  • “Bloqueo” escenarios.

  • Diferencias de orden de bytes entre equipos de enviar y recibir.

  • El convertir Unicode y cadenas de juego de caracteres multibyte (MBCS).

Para obtener definiciones de estos términos e información adicional, vea Windows Sockets: Bloquear, Windows Sockets: El orden de byte, Windows Sockets: Convertir cadenas.

A pesar de estos problemas, la clase CAsycnSocket puede ser la opción correcta automáticamente si la aplicación requiere toda la flexibilidad y los controles puede obtener. Si no, considere el uso de la clase CSocket en su lugar. CSocket oculta mucho detalle de permite: bombea los mensajes de Windows durante las llamadas de bloqueo y proporciona acceso a CArchive, que administra diferencias de orden de bytes y la conversión de cadenas para usted.

Para obtener más información, vea:

Vea también

Conceptos

Windows Sockets en MFC