MFC - Programación de Internet
Microsoft proporciona muchas API para programar aplicaciones tanto de cliente como de servidor. Se están escribiendo muchas aplicaciones nuevas para Internet y, a medida que cambien las tecnologías, las capacidades del navegador y las opciones de seguridad, se escribirán nuevos tipos de aplicaciones. Su aplicación personalizada puede recuperar información y proporcionar datos en Internet.
MFC proporciona una clase CSocket para escribir programas de comunicaciones de red con Windows Sockets.
Aquí hay una lista de métodos en la clase CSocket.
| No Señor. | Nombre y descripción |
|---|---|
| 1 | Attach Adjunta un identificador SOCKET a un objeto CSocket. |
| 2 | CancelBlockingCall Cancela una llamada de bloqueo que está en curso. |
| 3 | Create Crea un encaje. |
| 4 | FromHandle Devuelve un puntero a un objeto CSocket, dado un identificador SOCKET. |
| 5 | IsBlocking Determina si hay una llamada de bloqueo en curso. |
Veamos un ejemplo simple creando una aplicación MFS SDI.
Step 1 - Introduzca MFCServer en el campo de nombre y haga clic en Aceptar.
Step 2 - En la pestaña Funciones avanzadas, marque la opción Sockets de Windows.
Step 3 - Una vez creado el proyecto, agregue una nueva clase MFC CServerSocket.
Step 4 - Seleccione CSocket como clase base y haga clic en Finalizar.
Step 5 - Agregue más CReceivingSocket de clase MFC.
Step 6 - CRecevingSocket recibirá mensajes entrantes del cliente.
En CMFCServerApp, el archivo de encabezado incluye los siguientes archivos:
#include "ServerSocket.h"
#include "MFCServerView.h"
Step 7 - Agregue las siguientes dos variables de clase en la clase CMFCServerApp.
CServerSocket m_serverSocket;
CMFCServerView m_pServerView;
Step 8 - En el método CMFCServerApp :: InitInstance (), cree el socket y especifique el puerto y luego llame al método Listen como se muestra a continuación.
m_serverSocket.Create(6666);
m_serverSocket.Listen();
Step 9 - Incluya el siguiente archivo de encabezado en el archivo de encabezado CMFCServerView.
#include "MFCServerDoc.h"
Step 10 - Anula la función OnAccept de la clase Socket.
Step 11- Seleccione CServerSocket en la vista de clases y el icono resaltado en la ventana Propiedades. Ahora, agregue OnAccept. Aquí está la implementación de la función OnAccept.
void CServerSocket::OnAccept(int nErrorCode) {
// TODO: Add your specialized code here and/or call the base class
AfxMessageBox(L"Connection accepted");
CSocket::OnAccept(nErrorCode);
}
Step 12 - Agregue la función OnReceive ().
void CServerSocket::OnReceive(int nErrorCode) {
// TODO: Add your specialized code here and/or call the base class
AfxMessageBox(L"Data Received");
CSocket::OnReceive(nErrorCode);
}
Step 13 - Agregue la función OnReceive () en la clase CReceivingSocket.
Haga clic con el botón derecho en la clase CMFCServerView en el explorador de soluciones y seleccione Agregar → Agregar función.
Step 14 - Ingrese la información mencionada anteriormente y haga clic en finalizar.
Step 15 - Agregue la siguiente variable CStringArray en el archivo de encabezado CMFCServerView.
CStringArray m_msgArray;
Step 16 - Aquí está la implementación de la función AddMsg ().
void CMFCServerView::AddMsg(CString message) {
m_msgArray.Add(message);
Invalidate();
}
Step 17 - Actualice el constructor como se muestra en el siguiente código.
CMFCServerView::CMFCServerView() {
((CMFCServerApp*)AfxGetApp()) -> m_pServerView = this;
}
Step 18 - Aquí está la implementación de la función OnDraw (), que muestra mensajes.
void CMFCServerView::OnDraw(CDC* pDC) {
int y = 100;
for (int i = 0; m_msgArray.GetSize(); i++) {
pDC->TextOut(100, y, m_msgArray.GetAt(i));
y += 50;
}
CMFCServerDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
Step 19- El lado del servidor ahora está completo. Recibirá mensaje del cliente.
Crear aplicación del lado del cliente
Step 1 - Creemos una nueva aplicación basada en diálogo MFC para la aplicación del lado del cliente.
Step 2 - En la pestaña Funciones avanzadas, marque la opción Sockets de Windows como se muestra arriba.
Step 3 - Una vez creado el proyecto, diseñe su cuadro de diálogo como se muestra en la siguiente instantánea.
Step 4 - Agregue controladores de eventos para los botones Conectar y Enviar.
Step 5- Agregue variables de valor para los tres controles de edición. Para el control de edición de puertos, seleccione el tipo de variable UINT.
Step 6 - Agregue la clase MFC para conectarse y enviar mensajes.
Step 7- Incluya el archivo de encabezado de la clase CClientSocket en el archivo de encabezado de la clase CMFCClientDemoApp y agregue la variable de clase. De manera similar, agregue la variable de clase en el archivo de encabezado CMFCClientDemoDlg también.
CClientSocket m_clientSocket;
Step 8 - Aquí está la implementación del controlador de eventos del botón Conectar.
void CMFCClientDemoDlg::OnBnClickedButtonConnect() {
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_clientSocket.Create();
if (m_clientSocket.Connect(m_ipAddress, m_port)) {
AfxMessageBox(L"Connection Successfull");
}else {
AfxMessageBox(L"Connection Failed");
}
DWORD error = GetLastError();
}
Step 9 - Aquí está la implementación del controlador de eventos del botón Enviar.
void CMFCClientDemoDlg::OnBnClickedButtonSend() {
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if (m_clientSocket.Send(m_message.GetBuffer(m_message.GetLength()), m_message.GetLength())) {
}else {
AfxMessageBox(L"Failed to send message");
}
}
Step 10- Primero ejecute la aplicación Servidor y luego la aplicación cliente. Ingrese la IP y el puerto del host local y haga clic en Conectar.
Step 11 - Ahora verá el mensaje en el lado del servidor como se muestra en la siguiente instantánea.