MFC - การเขียนโปรแกรมอินเทอร์เน็ต

Microsoft มี API มากมายสำหรับการเขียนโปรแกรมทั้งไคลเอนต์และแอปพลิเคชันเซิร์ฟเวอร์ แอปพลิเคชันใหม่จำนวนมากกำลังถูกเขียนขึ้นสำหรับอินเทอร์เน็ตและเมื่อเทคโนโลยีความสามารถของเบราว์เซอร์และตัวเลือกความปลอดภัยเปลี่ยนไปจะมีการเขียนแอปพลิเคชันประเภทใหม่ แอปพลิเคชันที่กำหนดเองของคุณสามารถดึงข้อมูลและให้ข้อมูลบนอินเทอร์เน็ตได้

MFC จัดให้มีชั้นเรียน CSocket สำหรับการเขียนโปรแกรมการสื่อสารเครือข่ายด้วย Windows Sockets

นี่คือรายการวิธีการในคลาส CSocket

ซีเนียร์ ชื่อและคำอธิบาย
1

Attach

ติดที่จับ SOCKET เข้ากับวัตถุ CSocket

2

CancelBlockingCall

ยกเลิกการบล็อกการโทรที่กำลังดำเนินการอยู่

3

Create

สร้างซ็อกเก็ต

4

FromHandle

ส่งกลับตัวชี้ไปยังวัตถุ CSocket โดยให้ที่จับ SOCKET

5

IsBlocking

กำหนดว่ากำลังดำเนินการบล็อกการโทรอยู่หรือไม่

ให้เราดูตัวอย่างง่ายๆโดยการสร้างแอปพลิเคชัน MFS SDI

Step 1 - ป้อน MFCServer ในช่องชื่อและคลิกตกลง

Step 2 - บนแท็บคุณสมบัติขั้นสูงตรวจสอบตัวเลือกซ็อกเก็ต Windows

Step 3 - เมื่อสร้างโครงการแล้วให้เพิ่ม CServerSocket คลาส MFC ใหม่

Step 4 - เลือก CSocket เป็นคลาสพื้นฐานแล้วคลิกเสร็จสิ้น

Step 5 - เพิ่ม MFC class CReceivingSocket เพิ่มเติม

Step 6 - CRecevingSocket จะได้รับข้อความขาเข้าจากลูกค้า

ใน CMFCServerApp ไฟล์ส่วนหัวประกอบด้วยไฟล์ต่อไปนี้ -

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

Step 7 - เพิ่มตัวแปรคลาสสองตัวต่อไปนี้ในคลาส CMFCServerApp

CServerSocket m_serverSocket;
CMFCServerView m_pServerView;

Step 8 - ในวิธี CMFCServerApp :: InitInstance () ให้สร้างซ็อกเก็ตและระบุพอร์ตจากนั้นเรียกใช้เมธอด Listen ดังที่แสดงด้านล่าง

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

Step 9 - รวมไฟล์ส่วนหัวต่อไปนี้ไว้ในไฟล์ส่วนหัว CMFCServerView

#include "MFCServerDoc.h"

Step 10 - แทนที่ฟังก์ชัน OnAccept จากคลาส Socket

Step 11- เลือก CServerSocket ในมุมมองชั้นเรียนและไอคอนที่ไฮไลต์ในหน้าต่างคุณสมบัติ ตอนนี้เพิ่ม OnAccept นี่คือการใช้งานฟังก์ชัน 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 - เพิ่มฟังก์ชัน 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 - เพิ่มฟังก์ชัน OnReceive () ในคลาส CReceivingSocket

คลิกขวาที่คลาส CMFCServerView ในตัวสำรวจโซลูชันและเลือกเพิ่ม→ AddFunction

Step 14 - ป้อนข้อมูลดังกล่าวข้างต้นแล้วคลิกเสร็จสิ้น

Step 15 - เพิ่มตัวแปร CStringArray ต่อไปนี้ในไฟล์ส่วนหัว CMFCServerView

CStringArray m_msgArray;

Step 16 - นี่คือการใช้งานฟังก์ชัน AddMsg ()

void CMFCServerView::AddMsg(CString message) {

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

Step 17 - อัปเดตตัวสร้างดังแสดงในโค้ดต่อไปนี้

CMFCServerView::CMFCServerView() {

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

Step 18 - นี่คือการใช้งานฟังก์ชัน OnDraw () ซึ่งแสดงข้อความ

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- ตอนนี้ฝั่งเซิร์ฟเวอร์เสร็จสมบูรณ์แล้ว จะได้รับข้อความจากลูกค้า

สร้างแอปพลิเคชันฝั่งไคลเอ็นต์

Step 1 - ให้เราสร้างแอปพลิเคชั่นโต้ตอบ MFC ใหม่สำหรับแอปพลิเคชันฝั่งไคลเอ็นต์

Step 2 - บนแท็บคุณสมบัติขั้นสูงตรวจสอบตัวเลือกซ็อกเก็ต Windows ดังที่แสดงด้านบน

Step 3 - เมื่อสร้างโครงการแล้วให้ออกแบบกล่องโต้ตอบของคุณดังที่แสดงในภาพรวมต่อไปนี้

Step 4 - เพิ่มตัวจัดการเหตุการณ์สำหรับปุ่มเชื่อมต่อและส่ง

Step 5- เพิ่มตัวแปรค่าสำหรับตัวควบคุมการแก้ไขทั้งสามตัว สำหรับการควบคุมการแก้ไขพอร์ตให้เลือกประเภทตัวแปร UINT

Step 6 - เพิ่มคลาส MFC สำหรับเชื่อมต่อและส่งข้อความ

Step 7- รวมไฟล์ส่วนหัวของคลาส CClientSocket ในไฟล์ส่วนหัวคลาส CMFCClientDemoApp และเพิ่มตัวแปรคลาส ในทำนองเดียวกันให้เพิ่มตัวแปรคลาสในไฟล์ส่วนหัว CMFCClientDemoDlg ด้วย

CClientSocket m_clientSocket;

Step 8 - นี่คือการใช้งานตัวจัดการเหตุการณ์ปุ่มเชื่อมต่อ

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 - นี่คือการใช้งานตัวจัดการเหตุการณ์ปุ่มส่ง

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- ก่อนอื่นให้เรียกใช้แอปพลิเคชันเซิร์ฟเวอร์จากนั้นจึงเรียกใช้แอปพลิเคชันไคลเอนต์ ป้อน ip และพอร์ตของโฮสต์โลคัลแล้วคลิกเชื่อมต่อ

Step 11 - ตอนนี้คุณจะเห็นข้อความที่ฝั่งเซิร์ฟเวอร์ดังที่แสดงในภาพรวมต่อไปนี้