MFC - Internetprogrammierung
Microsoft bietet viele APIs zum Programmieren von Client- und Serveranwendungen. Viele neue Anwendungen werden für das Internet geschrieben, und wenn sich Technologien, Browserfunktionen und Sicherheitsoptionen ändern, werden neue Arten von Anwendungen geschrieben. Ihre benutzerdefinierte Anwendung kann Informationen abrufen und Daten im Internet bereitstellen.
MFC bietet eine Klasse CSocket zum Schreiben von Netzwerkkommunikationsprogrammen mit Windows Sockets.
Hier ist eine Liste der Methoden in der CSocket-Klasse.
Sr.Nr. | Name & Beschreibung |
---|---|
1 | Attach Hängt ein SOCKET-Handle an ein CSocket-Objekt an. |
2 | CancelBlockingCall Bricht einen gerade laufenden Sperranruf ab. |
3 | Create Erstellt einen Socket. |
4 | FromHandle Gibt einen Zeiger auf ein CSocket-Objekt mit einem SOCKET-Handle zurück. |
5 | IsBlocking Legt fest, ob ein blockierender Anruf ausgeführt wird. |
Schauen wir uns ein einfaches Beispiel an, indem wir eine MFS-SDI-Anwendung erstellen.
Step 1 - Geben Sie MFCServer in das Namensfeld ein und klicken Sie auf OK.
Step 2 - Aktivieren Sie auf der Registerkarte Erweiterte Funktionen die Option Windows-Sockets.
Step 3 - Fügen Sie nach dem Erstellen des Projekts eine neue MFC-Klasse CServerSocket hinzu.
Step 4 - Wählen Sie das CSocket als Basisklasse aus und klicken Sie auf Fertig stellen.
Step 5 - Fügen Sie weitere MFC-Klasse CReceivingSocket hinzu.
Step 6 - CRecevingSocket empfängt eingehende Nachrichten vom Client.
In CMFCServerApp enthält die Header-Datei die folgenden Dateien:
#include "ServerSocket.h"
#include "MFCServerView.h"
Step 7 - Fügen Sie der CMFCServerApp-Klasse die folgenden zwei Klassenvariablen hinzu.
CServerSocket m_serverSocket;
CMFCServerView m_pServerView;
Step 8 - Erstellen Sie in der CMFCServerApp :: InitInstance () -Methode den Socket und geben Sie den Port an. Rufen Sie dann die Listen-Methode wie unten gezeigt auf.
m_serverSocket.Create(6666);
m_serverSocket.Listen();
Step 9 - Fügen Sie die folgende Header-Datei in die CMFCServerView-Header-Datei ein.
#include "MFCServerDoc.h"
Step 10 - Überschreiben Sie die OnAccept-Funktion der Socket-Klasse.
Step 11- Wählen Sie CServerSocket in der Klassenansicht und das hervorgehobene Symbol im Eigenschaftenfenster. Fügen Sie nun OnAccept hinzu. Hier ist die Implementierung der OnAccept-Funktion.
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 - Fügen Sie die Funktion OnReceive () hinzu.
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 - Fügen Sie die OnReceive () - Funktion in der CReceivingSocket-Klasse hinzu.
Klicken Sie im Solution Explorer mit der rechten Maustaste auf die CMFCServerView-Klasse und wählen Sie Hinzufügen → AddFunction.
Step 14 - Geben Sie die oben genannten Informationen ein und klicken Sie auf Fertig stellen.
Step 15 - Fügen Sie die folgende CStringArray-Variable in die CMFCServerView-Headerdatei ein.
CStringArray m_msgArray;
Step 16 - Hier ist die Implementierung der Funktion AddMsg ().
void CMFCServerView::AddMsg(CString message) {
m_msgArray.Add(message);
Invalidate();
}
Step 17 - Aktualisieren Sie den Konstruktor wie im folgenden Code gezeigt.
CMFCServerView::CMFCServerView() {
((CMFCServerApp*)AfxGetApp()) -> m_pServerView = this;
}
Step 18 - Hier ist die Implementierung der OnDraw () -Funktion, die Meldungen anzeigt.
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- Die Serverseite ist jetzt fertig. Es wird eine Nachricht vom Client empfangen.
Erstellen Sie eine clientseitige Anwendung
Step 1 - Lassen Sie uns eine neue dialogbasierte MFC-Anwendung für clientseitige Anwendungen erstellen.
Step 2 - Aktivieren Sie auf der Registerkarte Erweiterte Funktionen die Option Windows-Sockets wie oben gezeigt.
Step 3 - Entwerfen Sie nach dem Erstellen des Projekts Ihr Dialogfeld wie im folgenden Schnappschuss gezeigt.
Step 4 - Fügen Sie Ereignishandler für die Schaltflächen Verbinden und Senden hinzu.
Step 5- Fügen Sie Wertvariablen für alle drei Bearbeitungssteuerelemente hinzu. Wählen Sie zur Steuerung der Portbearbeitung den Variablentyp UINT aus.
Step 6 - Fügen Sie eine MFC-Klasse zum Verbinden und Senden von Nachrichten hinzu.
Step 7- Fügen Sie die Header-Datei der CClientSocket-Klasse in die Header-Datei CMFCClientDemoApp ein und fügen Sie die Klassenvariable hinzu. Fügen Sie in ähnlicher Weise die Klassenvariable auch in die CMFCClientDemoDlg-Headerdatei ein.
CClientSocket m_clientSocket;
Step 8 - Hier ist die Implementierung des Connect Button Event Handlers.
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 - Hier ist die Implementierung des Ereignishandlers für die Schaltfläche "Senden".
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- Führen Sie zuerst die Serveranwendung und dann die Clientanwendung aus. Geben Sie die IP und den Port des lokalen Hosts ein und klicken Sie auf Verbinden.
Step 11 - Sie sehen nun die Meldung auf der Serverseite, wie im folgenden Schnappschuss gezeigt.