void CMFCSocketClientDlg::OnBnClickedButtonConnect()
{
pSocketClient = new CSocketClient();
UpdateData(TRUE);
pSocketClient->m_strHost = m_Port;
m_IP.GetWindowText(pSocketClient->m_strIP);
pSocketClient->m_hMsgWnd = this->GetSafeHwnd();
int nPort = atoi(pSocketClient->m_strHost);
pSocketClient->Create(0, SOCK_STREAM, FD_READ | FD_WRITE | FD_CONNECT | FD_CLOSE, NULL);
pSocketClient->Connect((LPCTSTR)pSocketClient->m_strIP, nPort);
DWORD nErrno = GetLastError();
//如果onConnect沒(méi)有觸發(fā),調(diào)用GetLastError看看 nErrno的值,是不是10093,如果是,那就是app的InitInstance里面
//socket沒(méi)有初始化,添加如下代碼就可以了,
//if (!AfxSocketInit()),如果寫成if (!AfxSocketInit),少了一對(duì)括號(hào),也會(huì)出錯(cuò)啦。
//{
//
AfxMessageBox("socket初始化失敗");
//
return FALSE;
//}
}
1.stdafx.h中包含 #include <afxsock.h>
2.
創(chuàng)建CSocketClient類
3.頭文件繼承CAsyncSocket類
4.項(xiàng)目app文件InitInstance位置添加socket初始化代碼
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}
5.添加Init函數(shù)
6.定義m_szReceBuf變量
7.宏定義#define MAXSOCKBUF 1024
8.定義長(zhǎng)度m_nLength
9.添加OnClose函數(shù)
10.添加OnConnect函數(shù)
11.添加bool變量m_bConnect
12.定義句柄m_hMsgWnd
13.stdafx.h中添加宏定義:#define WM_SOCKET_LOG WM_USER+200
WM_SOCKET_RECEIVE,并在dlg cpp的對(duì)話框消息映射對(duì)應(yīng)兩個(gè)函數(shù)
ON_MESSAGE(WM_SOCKET_LOG,OnLogMsg)
ON_MESSAGE(WM_SOCKET_RECEIVE, OnRecvMsg)
14.CSocketClient類中添加OnReceive函數(shù)
15.添加OnSend函數(shù)
16.dlg cpp中添加回調(diào)函數(shù)OnLogMsg,OnRecvMsg
17.添加WriteLog函數(shù)
18.添加連接服務(wù)器按鈕代碼
19.dlg cpp.h中添加#include "SocketClient.h"
20.dlg cpp.h中protect添加:CSocketClient* pSocketClient;
21.client類中添加變量m_strHost,m_strIP;
void CMFCSocketClientDlg::OnBnClickedButtonConnect()
{
pSocketClient = new CSocketClient();
UpdateData(TRUE);
pSocketClient->m_strHost = m_Port;
m_IP.GetWindowText(pSocketClient->m_strIP);
pSocketClient->m_hMsgWnd = this->GetSafeHwnd();
int nPort = atoi(pSocketClient->m_strHost);
pSocketClient->Create(0, SOCK_STREAM, FD_READ | FD_WRITE | FD_CONNECT | FD_CLOSE, NULL);
pSocketClient->Connect((LPCTSTR)pSocketClient->m_strIP, nPort);
DWORD nErrno = GetLastError();
//如果onConnect沒(méi)有觸發(fā),調(diào)用GetLastError看看 nErrno的值,是不是10093,如果是,那就是app的InitInstance里面
//socket沒(méi)有初始化,添加如下代碼就可以了,
//if (!AfxSocketInit()),如果寫成if (!AfxSocketInit),少了一對(duì)括號(hào),也會(huì)出錯(cuò)啦。
//{
// AfxMessageBox("socket初始化失敗");
// return FALSE;
//}
}
本站文章版權(quán)歸原作者及原出處所有 。內(nèi)容為作者個(gè)人觀點(diǎn), 并不代表本站贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),本站只提供參考并不構(gòu)成任何投資及應(yīng)用建議。本站是一個(gè)個(gè)人學(xué)習(xí)交流的平臺(tái),網(wǎng)站上部分文章為轉(zhuǎn)載,并不用于任何商業(yè)目的,我們已經(jīng)盡可能的對(duì)作者和來(lái)源進(jìn)行了通告,但是能力有限或疏忽,造成漏登,請(qǐng)及時(shí)聯(lián)系我們,我們將根據(jù)著作權(quán)人的要求,立即更正或者刪除有關(guān)內(nèi)容。本站擁有對(duì)此聲明的最終解釋權(quán)。