MFC - Programação para Internet

A Microsoft fornece muitas APIs para programar aplicativos de cliente e servidor. Muitos novos aplicativos estão sendo escritos para a Internet e, à medida que as tecnologias, recursos do navegador e opções de segurança mudam, novos tipos de aplicativos serão criados. Seu aplicativo personalizado pode recuperar informações e fornecer dados na Internet.

MFC fornece uma classe CSocket para escrever programas de comunicação de rede com Windows Sockets.

Aqui está uma lista de métodos na classe CSocket.

Sr. Não. Nome e Descrição
1

Attach

Anexa um identificador SOCKET a um objeto CSocket.

2

CancelBlockingCall

Cancela uma chamada de bloqueio que está em andamento.

3

Create

Cria um soquete.

4

FromHandle

Retorna um ponteiro para um objeto CSocket, dado um identificador SOCKET.

5

IsBlocking

Determina se uma chamada de bloqueio está em andamento.

Vejamos um exemplo simples criando um aplicativo MFS SDI.

Step 1 - Insira MFCServer no campo do nome e clique em OK.

Step 2 - Na aba Advanced Features, marque a opção Windows sockets.

Step 3 - Depois que o projeto for criado, adicione uma nova classe MFC CServerSocket.

Step 4 - Selecione o CSocket como classe base e clique em Concluir.

Step 5 - Adicionar mais classe MFC CReceivingSocket.

Step 6 - CRecevingSocket receberá mensagens de entrada do cliente.

No CMFCServerApp, o arquivo de cabeçalho inclui os seguintes arquivos -

#include "ServerSocket.h"
#include "MFCServerView.h"

Step 7 - Adicione as duas variáveis ​​de classe a seguir na classe CMFCServerApp.

CServerSocket m_serverSocket;
CMFCServerView m_pServerView;

Step 8 - No método CMFCServerApp :: InitInstance (), crie o socket e especifique a porta e então chame o método Listen como mostrado abaixo.

m_serverSocket.Create(6666);
m_serverSocket.Listen();

Step 9 - Inclua o seguinte arquivo de cabeçalho no arquivo de cabeçalho CMFCServerView.

#include "MFCServerDoc.h"

Step 10 - Substitua a função OnAccept da classe Socket.

Step 11- Selecione CServerSocket na visualização de classe e o ícone destacado na janela Propriedades. Agora, adicione OnAccept. Aqui está a implementação da função 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 - Adicione a função 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 - Adicione a função OnReceive () na classe CReceivingSocket.

Clique com o botão direito do mouse na classe CMFCServerView no Solution Explorer e selecione Add → AddFunction.

Step 14 - Insira as informações mencionadas acima e clique em concluir.

Step 15 - Adicione a seguinte variável CStringArray no arquivo de cabeçalho CMFCServerView.

CStringArray m_msgArray;

Step 16 - Aqui está a implementação da função AddMsg ().

void CMFCServerView::AddMsg(CString message) {

   m_msgArray.Add(message);
   Invalidate();
}

Step 17 - Atualize o construtor conforme mostrado no código a seguir.

CMFCServerView::CMFCServerView() {

   ((CMFCServerApp*)AfxGetApp()) -> m_pServerView = this;
}

Step 18 - Aqui está a implementação da função OnDraw (), que exibe mensagens.

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- O lado do servidor agora está completo. Ele receberá mensagem do cliente.

Criar aplicativo do lado do cliente

Step 1 - Vamos criar um novo aplicativo baseado em diálogo MFC para o aplicativo do lado do cliente.

Step 2 - Na guia Advanced Features, marque a opção Windows sockets conforme mostrado acima.

Step 3 - Depois que o projeto for criado, crie sua caixa de diálogo conforme mostrado no instantâneo a seguir.

Step 4 - Adicione manipuladores de eventos para os botões Conectar e Enviar.

Step 5- Adicione variáveis ​​de valor para todos os três controles de edição. Para controle de edição de porta, selecione o tipo de variável UINT.

Step 6 - Adicionar classe MFC para conectar e enviar mensagens.

Step 7- Inclua o arquivo de cabeçalho da classe CClientSocket na classe CMFCClientDemoApp do arquivo de cabeçalho e adicione a variável de classe. Da mesma forma, adicione a variável de classe no arquivo de cabeçalho CMFCClientDemoDlg também.

CClientSocket m_clientSocket;

Step 8 - Aqui está a implementação do manipulador de eventos do botão Connect.

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 - Aqui está a implementação do manipulador de eventos do botão 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- Primeiro execute o aplicativo do servidor e, em seguida, o aplicativo do cliente. Insira o IP e a porta do host local e clique em Conectar.

Step 11 - Agora você verá a mensagem no lado do servidor, conforme mostrado no instantâneo a seguir.