Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Windows Sockets: Uso de la clase
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 un
CAsyncSocketobjeto .
Creación y uso de una CAsyncSocket
Para usar CAsyncSocket
Construya un objeto
CAsyncSockety use el objeto para crear el identificadorSOCKETsubyacente.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 parametersO bien
CAsyncSocket *pSocket = new CAsyncSocket; int nPort = 27; pSocket->Create(nPort, SOCK_DGRAM);El primer constructor anterior crea un
CAsyncSocketobjeto en la pila. El segundo constructor crea unCAsyncSocketen el montón. La primeraCreatellamada anterior usa los parámetros predeterminados para crear un socket de flujo. La segundaCreatellamada crea un socket de datagrama con un puerto y una dirección especificados. (Puede usar cualquiera de lasCreateversiones con cualquier método de construcción).Los parámetros para
Createson: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) oSOCK_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.
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 conCAsyncSocket::Accept.Después de aceptar una conexión, puede realizar tareas como validar contraseñas.
Nota:
La
Acceptfunción miembro toma una referencia a un nuevo objeto vacíoCSocketcomo parámetro. Debe construir este objeto antes de llamar aAccept. Si este objeto de socket sale del ámbito, la conexión se cierra. No llame aCreatepara este nuevo objeto de socket. Para obtener un ejemplo, consulte el artículo Windows Sockets: Secuencia de operaciones.Lleve a cabo comunicaciones con otros sockets al llamar a las funciones miembro del objeto
CAsyncSocketque encapsulan las funciones de la API de Windows Sockets.Consulta la especificación y la clase
CAsyncSocketde Windows Sockets en la referencia de MFC.Destruye el
CAsyncSocketobjeto.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 operadordeletepara destruir el objeto.El destructor llama a la función miembro del objeto
Closeantes 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:
- Windows Sockets: Introducción
- Windows Sockets: Sockets de flujos
- Windows Sockets: Sockets de datagramas