Puntuación alta. Cómo utilizar la clase Csocket para crear un programa de conexión de red.
Método de implementación
MFC de Microsoft encapsula funciones complejas de la API de WinSock en clases, lo que facilita la escritura de aplicaciones de red. La clase CAsyncSocket encapsula la API de WinSock una por una, proporcionando un método más potente y flexible para programadores de redes avanzados. Esta clase se basa en el supuesto de que el programador comprende la comunicación de red. Para utilizar WinSock en MFC, el programador es responsable de manejar tareas como el bloqueo, el orden de bytes y la conversión de caracteres entre Unicode y MBCS. Para proporcionar a los programadores una interfaz más conveniente para manejar automáticamente estas tareas, MFC proporciona la clase CSocket, que se hereda de la clase CAsyncSocket. Proporciona una interfaz API WinSock de nivel superior que CAsyncSocket. Las clases Csocket y CsocketFile pueden funcionar junto con la clase Carchive para administrar los datos enviados y recibidos, lo que hace que sea más conveniente administrar el envío y la recepción de datos. El objeto CSocket proporciona un modo de bloqueo, que es crucial para las operaciones de sincronización de Carchive. Las funciones de bloqueo (como Recibir(), Enviar(), RecibirDe(), EnviarA() y Aceptar()) no devuelven el control hasta que se completa la operación, por lo que si necesita control de bajo nivel y alta eficiencia, use CasyncSock class; si necesita comodidad, puede usar la clase Csocket.
Algunas aplicaciones de red (como telefonía por Internet y herramientas de conferencias multimedia) tienen requisitos de tiempo real muy estrictos y requieren la capacidad de utilizar WinSock directamente para enviar y recibir datos. Para aprovechar al máximo MFC, la primera opción debe ser la clase CAsyncSocket o la clase CSocket en MFC. Estas dos clases encapsulan completamente la API de WinSock y brindan más conveniencia. Este ejemplo presenta el modelo de programación de la aplicación de estas dos clases y conduce a explicaciones de funciones miembro relacionadas y algunos conceptos.
La clase CSocket se hereda de CAsyncSocket. De hecho, en MFC, CAsyncSocket encapsula la API de WinSock una por una. Cada objeto CAsyncSocket representa un objeto de Windows Socket. El uso de la clase CAsyncSocket requiere que los programadores estén más familiarizados con ella. programación de red. En comparación, la clase CSocket es una clase derivada de CAsyncSocket y hereda la API de WinSock que encapsula.
Un objeto CSocket representa una abstracción de Windows Socket de nivel superior que el objeto CAsyncSocket. La clase CSocket funciona con la clase CSocketFile y la clase CArchive para enviar y recibir datos, por lo que es más fácil de usar. El objeto CSocket proporciona el modo de bloqueo, porque la función de bloqueo es crucial para la operación de sincronización de CArchive. Es necesario explicar el concepto de bloqueo aquí: un socket puede estar en "modo de bloqueo" o "modo sin bloqueo". Cuando un socket está en modo de bloqueo (es decir, operación sincrónica), su función de bloqueo no se ejecutará hasta que se ejecute. la operación se completa y se devuelve el control. Se llama bloqueo porque la función de bloqueo en este socket no puede hacer nada hasta que completa la operación y regresa. Si un socket está en modo sin bloqueo (es decir, operación asincrónica), la función llamada regresará inmediatamente. En la clase CAsyncSocket, puede usar la función miembro GetLastError para consultar el último error. Si el error es WSAEWOULDBLOCK, significa que hay bloqueo y CSocket nunca devolverá WSAEWOULDBLOCK porque administra el bloqueo por sí mismo. Microsoft recomienda utilizar el modo sin bloqueo tanto como sea posible, notificando a la aplicación que maneje en consecuencia la ocurrencia de eventos de red. Sin embargo, en la clase CSocket, para utilizar CArchive para manejar muchos problemas de comunicación y simplificar la programación, algunas de sus funciones miembro siempre son de naturaleza bloqueante. Esto se debe a que la clase CArchive requiere operaciones sincrónicas.