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.