Windows Sockets: Mediante sockets con archivos
En este artículo se describe modelo de programación de CSocket.Compatibilidad de socket de fuentes de CSocket de clase en un nivel alto de abstracción que la clase CAsyncSocket.CSocket utiliza una versión del protocolo de serialización de MFC para pasar los datos entre un objeto de socket a través de un objeto de MFC CArchive .CSocket proporciona el bloqueo (mientras controla el procesamiento en segundo plano de mensajes de Windows) y proporciona acceso a CArchive, que administra muchos aspectos de comunicación que tendría que hacerse mediante la API sin formato o la clase CAsyncSocket.
Sugerencia |
---|
Puede utilizar la clase CSocket por sí mismo, como versión más conveniente de CAsyncSocket, pero el modelo de programación más sencillo es utilizar CSocket con un objeto de CArchive . |
Para obtener más información sobre cómo funciona la implementación de sockets con archivos, vea Windows Sockets: Cómo funcionan los sockets con archivos.Por ejemplo, vea Windows Sockets: secuencia de operaciones y Windows Sockets: Ejemplo de utilizar archivos de sockets.Para obtener información sobre algunas funcionalidades que puede hacerse derivar sus propias clases de las clases MFC sockets, vea Windows Sockets: Derivar clases de socket.
[!NOTA]
Si está escribiendo un programa cliente de MFC para comunicarse con los servidores establecidos (de MFC), no envíe los objetos de C++ a través del archivo.A menos que el servidor es una aplicación MFC que entienda las clases de objetos desee enviar, no podrá recibir y deserializar objetos.Para el material relacionado a propósito de comunicarse con aplicaciones de MFC, vea también el artículo Windows Sockets: El orden de byte.
El modelo de programación de CSocket
Utilizando un objeto de CSocket requiere crear y el asociar juntos de varios objetos de clases MFC.En el procedimiento general siguiente, cada medida es realizada por el socket de servidor y el socket de cliente, a excepción del paso 3, en el que cada tipo de socket requiere una acción diferente.
Sugerencia |
---|
En tiempo de ejecución, la aplicación de servidor inicia primero para ser lista y “que escucha” cuando la aplicación cliente busca una conexión.Si el servidor no está listo cuando el cliente intenta conectarse, se exige la aplicación de usuario para probar la conexión de nuevo más adelante. |
Para configurar la comunicación entre un socket de servidor y un socket de cliente
Crea un objeto de CSocket .
Utilice el objeto para crear el identificador subyacente de SOCKET .
Para un objeto de cliente CSocket , debe usar normalmente los parámetros predeterminados a cree, a menos que necesite un socket de datagrama.Para un objeto de servidor de CSocket , debe especificar un puerto en la llamada de Create .
[!NOTA]
CArchive no funciona con los sockets de datagrama.Si desea utilizar CSocket para un socket de datagrama, debe usar la clase como utilizaría CAsyncSocket, es decir, sin un archivo.Dado que los datagramas no son predecibles (no garantizado para proteger y se puede repetir o desordenados), no son compatibles con la serialización a través de un archivo.Se espera que una operación de serialización complete confiabilidad y en orden.Si intenta utilizar CSocket con un objeto de CArchive para un datagrama, una aserción de MFC produce un error.
Si el socket es un cliente, llamada CAsyncSocket::Connect para conectar el objeto de socket a un socket de servidor.
O bien
Si el socket es un servidor, llamada CAsyncSocket::Listen a iniciar la escucha de intenta conectarse desde un cliente.Al recibir una solicitud de conexión, aceptela llamando a CAsyncSocket::Accept.
[!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 Create para este nuevo objeto de socket.
Cree un objeto de CSocketFile , asociando el objeto de CSocket al.
Cree un objeto de CArchive de carga (receptora) o almacenar datos (de transporte).El archivo está asociado con el objeto de CSocketFile .
Tenga presente que CArchive no funciona con los sockets de datagrama.
Utilice el objeto de CArchive a los datos del paso entre el cliente y los sockets de servidor.
Tenga en cuenta que un objeto especificado de CArchive mueve datos solo en una dirección: para cargar (receptora) o almacenar (transporte).En algunos casos, utilizará dos objetos de CArchive : uno para enviar datos, otro para recibir acuses de recepción.
Después de aceptar una conexión y de colocar el archivo, puede realizar tareas como validando contraseñas.
Destruya el archivo, el archivo de socket, y los objetos de socket.
[!NOTA]
Fuentes de CArchive de la clase la función miembro de IsBufferEmpty específicamente para el uso con la clase CSocket.Si el búfer contiene mensajes de datos, por ejemplo, necesita recorrer hasta que se lean todos y se borra el búfer.Si no, la notificación siguiente que hay datos que se van a recibir puede ser y indefinidamente.Utilice IsBufferEmpty para garantizar que recupera todos los datos.
El artículo Windows Sockets: secuencia de operaciones muestra ambos lados de este proceso con código de ejemplo.
Para obtener más información, vea: