MFC - Programmazione Internet
Microsoft fornisce molte API per la programmazione di applicazioni client e server. Si stanno scrivendo molte nuove applicazioni per Internet e, man mano che le tecnologie, le capacità del browser e le opzioni di sicurezza cambiano, verranno scritti nuovi tipi di applicazioni. La tua applicazione personalizzata può recuperare informazioni e fornire dati su Internet.
MFC fornisce una classe CSocket per scrivere programmi di comunicazione di rete con Windows Sockets.
Ecco un elenco di metodi nella classe CSocket.
Sr.No. | Nome e descrizione |
---|---|
1 | Attach Associa un handle SOCKET a un oggetto CSocket. |
2 | CancelBlockingCall Annulla una chiamata di blocco attualmente in corso. |
3 | Create Crea un socket. |
4 | FromHandle Restituisce un puntatore a un oggetto CSocket, dato un handle SOCKET. |
5 | IsBlocking Determina se è in corso una chiamata di blocco. |
Esaminiamo un semplice esempio creando un'applicazione MFS SDI.
Step 1 - Immettere MFCServer nel campo del nome e fare clic su OK.
Step 2 - Nella scheda Funzionalità avanzate, seleziona l'opzione Windows socket.
Step 3 - Una volta creato il progetto, aggiungi una nuova classe MFC CServerSocket.
Step 4 - Seleziona CSocket come classe base e fai clic su Fine.
Step 5 - Aggiungere più CReceivingSocket di classe MFC.
Step 6 - CRecevingSocket riceverà i messaggi in arrivo dal client.
In CMFCServerApp, il file di intestazione include i seguenti file:
#include "ServerSocket.h"
#include "MFCServerView.h"
Step 7 - Aggiungere le seguenti due variabili di classe nella classe CMFCServerApp.
CServerSocket m_serverSocket;
CMFCServerView m_pServerView;
Step 8 - Nel metodo CMFCServerApp :: InitInstance (), creare il socket e specificare la porta, quindi chiamare il metodo Listen come mostrato di seguito.
m_serverSocket.Create(6666);
m_serverSocket.Listen();
Step 9 - Includere il seguente file di intestazione nel file di intestazione CMFCServerView.
#include "MFCServerDoc.h"
Step 10 - Ignora la funzione OnAccept dalla classe Socket.
Step 11- Seleziona CServerSocket nella visualizzazione classi e l'icona evidenziata nella finestra Proprietà. Ora aggiungi su Accetta. Ecco l'implementazione della funzione 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 - Aggiungi la funzione 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 - Aggiungi la funzione OnReceive () nella classe CReceivingSocket.
Fare clic con il pulsante destro del mouse sulla classe CMFCServerView in Esplora soluzioni e selezionare Aggiungi → Aggiungi funzione.
Step 14 - Immettere le informazioni di cui sopra e fare clic su Fine.
Step 15 - Aggiungere la seguente variabile CStringArray nel file di intestazione CMFCServerView.
CStringArray m_msgArray;
Step 16 - Ecco l'implementazione della funzione AddMsg ().
void CMFCServerView::AddMsg(CString message) {
m_msgArray.Add(message);
Invalidate();
}
Step 17 - Aggiorna il costruttore come mostrato nel codice seguente.
CMFCServerView::CMFCServerView() {
((CMFCServerApp*)AfxGetApp()) -> m_pServerView = this;
}
Step 18 - Ecco l'implementazione della funzione OnDraw (), che visualizza i messaggi.
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- Il lato server è ora completo. Riceverà un messaggio dal client.
Crea applicazione lato client
Step 1 - Creiamo una nuova applicazione basata sulla finestra di dialogo MFC per l'applicazione lato client.
Step 2 - Nella scheda Funzionalità avanzate, seleziona l'opzione Windows socket come mostrato sopra.
Step 3 - Una volta creato il progetto, progetta la tua finestra di dialogo come mostrato nell'istantanea seguente.
Step 4 - Aggiungi gestori di eventi per i pulsanti Connetti e Invia.
Step 5- Aggiungi variabili di valore per tutti e tre i controlli di modifica. Per il controllo della modifica della porta, selezionare il tipo di variabile UINT.
Step 6 - Aggiungi classe MFC per la connessione e l'invio di messaggi.
Step 7- Includere il file di intestazione della classe CClientSocket nel file di intestazione della classe CMFCClientDemoApp e aggiungere la variabile di classe. Allo stesso modo, aggiungi anche la variabile di classe nel file di intestazione CMFCClientDemoDlg.
CClientSocket m_clientSocket;
Step 8 - Ecco l'implementazione del gestore di eventi del pulsante 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 - Ecco l'implementazione del gestore di eventi del pulsante Invia.
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- Eseguire prima l'applicazione Server e poi l'applicazione client. Immettere l'ip e la porta dell'host locale e fare clic su Connetti.
Step 11 - Ora vedrai il messaggio sul lato Server come mostrato nella seguente istantanea.