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.