MFC CAsyncSocket类基本使用 - 1
win7, VC6;新建一個對話框工程;菜單選擇:插入 - 類;先來做?CAsyncSocket類 作為客戶端;
新建類;類的類型為MFC類,基類為CAsyncSocket;如果使用mfc實現套接字,一般要從mfc提供的套接字類繼承出自己的類,否則不好使;
生成相應類文件;
類向導里為CMysyncsock類添加OnConnect消息處理函數;
添加OnSend消息處理函數;
詳細的MS參考和示例代碼;
? ? https://docs.microsoft.com/zh-cn/cpp/mfc/reference/casyncsocket-class?view=msvc-160#casyncsocketcreate
一個講的詳細些的mfc套接字教程;
? ? https://wenku.baidu.com/view/1eda781c6bd97f192279e9de.html
使用CAsyncSocket類的基本步驟;
?
CMysyncsock類的頭文件需要包含,
? ? #include <afxSock.h>
為CMysyncsock類添加三個公共成員;
class CMysyncsock : public CAsyncSocket
{
// Attributes
public:
?? ?CString ?m_sendBuffer; ? //for async send
?? ?int ? ? ?m_nBytesSent;
?? ?int ? ? ?m_nBytesBufferSize;
OnConnect如下;?CAsyncSocket類作為客戶端,去連接服務端,進行了連接動作以后,mfc框架會自動調用下面的OnConnect函數,把錯誤碼傳進來;如果連接成功,錯誤碼為0;
void CMysyncsock::OnConnect(int nErrorCode) {// TODO: Add your specialized code here and/or call the base classif(nErrorCode==0){AfxMessageBox("客戶端連接服務端成功!!!");}else{AfxMessageBox("客戶端連接服務端失敗!!!");}CAsyncSocket::OnConnect(nErrorCode); }對話框類cpp文件包含:#include "Mysyncsock.h"
對話框類cpp文件的初始化對話框函數中,初始化套接字;
// TODO: Add extra initialization hereif (!AfxSocketInit()){AfxMessageBox("套接字初始化失敗!");return FALSE;}按鈕1的處理代碼;? ? 工程的名稱是sock3;
void CSock3Dlg::OnButton1() {// TODO: Add your control notification handler code heretry{CMysyncsock *pSocket = new CMysyncsock();//pSocket->Create();pSocket->Create(0, SOCK_STREAM, FD_READ | FD_WRITE | FD_CONNECT | FD_CLOSE, NULL);CString strret;BOOL ret;if (pSocket == NULL){//WriteLog("SOCKET沒有初始化");AfxMessageBox("SOCKET沒有初始化");return;}ret=pSocket->Connect("127.0.0.1", 9003);}catch(CException e){TCHAR szError[1024]; e.GetErrorMessage(szError,1024);AfxMessageBox(szError); } }啟動 nc,作為服務端監聽9003端口;
nc的使用見,
? ??https://blog.csdn.net/bcbobo21cn/article/details/106632720
然后啟動程序;點擊按鈕之后如下;
? ? 這樣客戶端程序就連接上了服務端;
? ? 點擊按鈕時,ret=pSocket->Connect("127.0.0.1", 9003) 這句被執行;連接執行了以后,mfc框架自己調用?void CMysyncsock::OnConnect(int nErrorCode) {...} 函數;
既然連上了,先簡單發送一下看,客戶端發;
在 ret=pSocket->Connect("127.0.0.1", 9003) 后添加2句發送代碼;
?? ??? ?char sendstr[50] = "ABCDEF";
?? ??? ?pSocket->Send((unsigned char*)sendstr,6);
nc端不會收到,還只是連接上;
如果使用?CAsyncSocket類 ,能提供一定的方便和方便編寫增強功能代碼;但有一定量的東西要熟悉;
總結
以上是生活随笔為你收集整理的MFC CAsyncSocket类基本使用 - 1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++17 非类型模板参数的auto 和
- 下一篇: 进一步学习 Cesium 和 3D Ti