導航:首頁 > 編程語言 > mfc組播編程

mfc組播編程

發布時間:2022-12-06 16:36:58

❶ 基於mfc的socket編程怎麼進行文件傳輸

1. 採用了多線程的方法,文件傳輸時使用AfxBeginThread()開啟新線程

void CClientsockDlg::OnBnClickedSend()
{
pThreadSend = AfxBeginThread(Thread_Send,this);/
}

文件的發送和接收都開起了新線程

UINTThread_Send(LPVOID lpParam)
{
代碼略…
}

2. 支持從配置文件configuration.ini中獲取伺服器參數

採用GetPrivateProfileString()和GetPrivateProfileInt()分別獲取位於ServerConfiguration.ini文件中的String類型的IP和int類型的port
CString IP;
int port;
GetPrivateProfileString
(L"ServerConfiguration",L"IP",L"沒有讀取到數據!",IP.GetBuffer(10),10,L".\\configuration.ini");
port=GetPrivateProfileInt(L"ServerConfiguration",L"port",0,L".\\configuration.ini");

3. 採用了面向對象的設計方式,功能之間按模塊劃分
MFC本身具有良好的面向對象的特性,本程序嚴格按照MFC框架結構編寫代碼,每個按鈕對應一個功能函數,降低了代碼之間的耦合性,有利於程序的擴展和復用。

void CServersockDlg::OnBnClickedChoose()
void CServersockDlg::OnBnClickedSend()
void CServersockDlg::OnBnClickedRecvdata()
void CServersockDlg::OnBnClickedAbout()
void CServersockDlg::OnBnClickedWriteini()

4. 採用了CSocket類,代碼相對更簡單
CSocket類是MFC框架對socket編程中的winsockAPI的封裝,因此通過這個類管理收發數據更加便利。代碼也跟那個既簡單易懂。
//創建
if(!Clientsock.Socket())
{
CString str;
str.Format(_T("Socket創建失敗:%d"),GetLastError());
AfxMessageBox(str);
}
//連接
if(!Clientsock.Connect(IP,port))
{
CString str;
str.Format(_T("Socket連接失敗:%d"),GetLastError());
AfxMessageBox(str);
}
else
{
AfxMessageBox(_T("Socket連接成功"));
代碼略…
//發送
while(nSize<FindFileData.nFileSizeLow)
{
szBuff = new char[1024];
memset(szBuff,0x00,1024);
nSend =file.Read(szBuff,1024);
Clientsock.Send(szBuff,nSend);//發送數據
nSize += nSend;
}
file.Close();
delete szBuff;
Clientsock.Close();
(dlg->GetDlgItem(IDC_SEND))->EnableWindow(TRUE);
AfxMessageBox(_T("文件發送成功"));
dlg->SetDlgItemTextW(IDC_FILEPATHNAME,_T(""));
}
return 0;

5. 支持數據在伺服器與客戶端之間雙向傳輸

本程序不但可以從客戶端往伺服器端傳文件,而且可以從伺服器端往客戶端傳文件。
但是互傳文件的方式並不是完全相同的。
伺服器端不管是接收文件還是發送文件始終是對綁定的埠進行監聽。
//綁定
if(!Serversock.Bind(port))
{
CString str;
str.Format(_T("Socket綁定失敗: %d"),GetLastError());
AfxMessageBox(str);
}
//監聽
if(!Serversock.Listen(10))
{
CString str;
str.Format(_T("Socket監聽失敗:%d"),GetLastError());
AfxMessageBox(str);
}

客戶端不管是接收文件還是發送文件始終是進行連接。
if(!Clientsock.Connect(IP,port))
{
CString str;
str.Format(_T("Socket連接失ì敗:%d"),GetLastError());
AfxMessageBox(str);
}
else
{
略…

6. 完全圖形化操作界面

二.軟體使用說明

客戶端主界面如圖所示:

單擊「選擇文件」彈出文件對話框,選擇一個要發送的文件,同時保存文件的路徑。
單擊「發送」則會讀取ServerConfiguration.ini文件中的配置信息(IP和port),並根據此信息建立Socket連接,發送文件。注意:伺服器端應該先單擊了「接受客戶端數據」,否則發送失敗。
單擊「接收」也會讀取ServerConfiguration.ini文件中的配置信息(IP和port),並根據此信息建立Socket連接,接收文件。注意:伺服器端應該先選擇了向客戶端發送的文件,並單擊了「發送」,否則接受失敗。
單擊「讀取配置文件」,會從ServerConfiguration.ini文件中讀取配置信息,並以可編輯的文本形式顯示出來,修改完後,單擊「寫入配置文件」,會將修改後的信息保存到配置文件中。
單擊「關於」可以了解到軟體相關信息。
代碼注釋里有更詳細的說明

伺服器端主界面如圖所示

u 單擊「接受客戶端數據」,開始監聽客戶端的鏈接。
u 單擊「選擇文件」彈出文件對話框,選擇一個要發送的文件,同時保存文件的路徑。
u 單擊「發送」則會讀取ServerConfiguration.ini文件中的配置信息(port),並監聽對應埠,准備發送文件。注意:客戶端選擇「接收」以後才能發送成功。
u 單擊「讀取配置文件」,會從ServerConfiguration.ini文件中讀取配置信息,並以可編輯的文本形式顯示出來,修改完後,單擊「寫入配置文件」,會將修改後的信息保存到配置文件中。但是伺服器的IP是不可以修改的,它是在程序開始運行時從伺服器所在機器的網卡上獲取的。
u 單擊「關於」可以了解到軟體相關信息。
u 代碼注釋里有更詳細的說明

代碼下載地址:http://download.csdn.net/detail/leixiaohua1020/6320417

在此附上客戶端使用CSocket發起連接的代碼
[cpp] view plain
//----------------------------發送文件的線程------------------------------
UINT Thread_Send(LPVOID lpParam)
{
CClientsockDlg *dlg=(CClientsockDlg *)lpParam;
(dlg->GetDlgItem(IDC_SEND))->EnableWindow(FALSE);

CSocket Clientsock; //definition socket.
if(!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
}

CString IP;
int port;
GetPrivateProfileString(L"ServerConfiguration",L"IP",L"沒有讀取到數據!",IP.GetBuffer(100),100,L".\\configuration.ini");
port=GetPrivateProfileInt(L"ServerConfiguration",L"port",0,L".\\configuration.ini");
//創建
if(!Clientsock.Socket())
{
CString str;
str.Format(_T("Socket創建失敗: %d"),GetLastError());
AfxMessageBox(str);
}
//連接
// if(!Clientsock.Connect(_T("127.0.0.1"),8088))
if(!Clientsock.Connect(IP,port))
{
CString str;
str.Format(_T("Socket連接失敗: %d"),GetLastError());
AfxMessageBox(str);
}
else
{
AfxMessageBox(_T("Socket連接成功"));
WIN32_FIND_DATA FindFileData;
CString strPathName; //定義用來保存發送文件路徑的CString對象
dlg->GetDlgItemTextW(IDC_FILEPATHNAME,strPathName);
FindClose(FindFirstFile(strPathName,&FindFileData));
Clientsock.Send(&FindFileData,sizeof(WIN32_FIND_DATA));

CFile file;
if(!file.Open(strPathName,CFile::modeRead|CFile::typeBinary))
{
AfxMessageBox(_T("文件不存在"));
return 1;
}

UINT nSize = 0;
UINT nSend = 0;

char *szBuff=NULL;
//發送
while(nSize<FindFileData.nFileSizeLow)
{
szBuff = new char[1024];
memset(szBuff,0x00,1024);
nSend = file.Read(szBuff,1024);
Clientsock.Send(szBuff,nSend);//發送數據
nSize += nSend;
}
file.Close();
delete szBuff;
Clientsock.Close();
(dlg->GetDlgItem(IDC_SEND))->EnableWindow(TRUE);
AfxMessageBox(_T("文件發送成功"));
dlg->SetDlgItemTextW(IDC_FILEPATHNAME,_T(""));
}
return 0;
}

以及伺服器端使用CSocket監聽的代碼:
[cpp] view plain
//----------------------------監聽文件的線程------------------------------
UINT Thread_Func(LPVOID lpParam) //接收文件的線程函數
{
CServersockDlg *dlg = (CServersockDlg *)lpParam; //獲取對話框指針
(dlg->GetDlgItem(IDC_RECVDATA))->EnableWindow(FALSE);

if(!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
}

CString IP;
int port;
GetPrivateProfileString(L"ServerConfiguration",L"IP",L"沒有讀取到數據!",IP.GetBuffer(100),100,L".\\configuration.ini");
port=GetPrivateProfileInt(L"ServerConfiguration",L"port",0,L".\\configuration.ini");

char errBuf[100]={0};// 臨時緩存

SYSTEMTIME t; //系統時間結構

CFile logErrorfile;
if(!logErrorfile.Open(_T("logErrorfile.txt"),CFile::modeCreate|CFile::modeReadWrite))
{
return 1;
}

CSocket Serversock;
CSocket Clientsock;
//創建
if(!Serversock.Socket())
{
CString str;
str.Format(_T("Socket創建失敗: %d"),GetLastError());
AfxMessageBox(str);
}

BOOL bOptVal = TRUE;
int bOptLen = sizeof(BOOL);
Serversock.SetSockOpt(SO_REUSEADDR,(void *)&bOptVal,bOptLen,SOL_SOCKET);

//綁定
if(!Serversock.Bind(port))
{
CString str;
str.Format(_T("Socket綁定失敗: %d"),GetLastError());
AfxMessageBox(str);
}
//監聽
if(!Serversock.Listen(10))
{
CString str;
str.Format(_T("Socket監聽失敗: %d"),GetLastError());
AfxMessageBox(str);
}

GetLocalTime(&t);
sprintf_s(errBuf,"伺服器已經啟動...正在等待接收文件...\r\n時間:%d年%d月%d日 %2d:%2d:%2d \r\n",t.wYear,t.wMonth,t.wDay,
t.wHour,t.wMinute,t.wSecond);
int len = strlen(errBuf);
logErrorfile.Write(errBuf,len);
AfxMessageBox(_T("啟動成功等待接收文件"));
while(1)
{
//AfxMessageBox(_T("伺服器啟動成功..."));
if(!Serversock.Accept(Clientsock)) //等待接收
{
continue;
}
else
{
WIN32_FIND_DATA FileInfo;
Clientsock.Receive(&FileInfo,sizeof(WIN32_FIND_DATA));

CFile file;
file.Open(FileInfo.cFileName,CFile::modeCreate|CFile::modeWrite);
//AfxMessageBox(FileInfo.cFileName);
int length = sizeof(FileInfo.cFileName);
logErrorfile.Write(FileInfo.cFileName,length);
//Receive文件的數據

UINT nSize = 0;
UINT nData = 0;

char *szBuff=NULL;

while(nSize<FileInfo.nFileSizeLow)
{
szBuff = new char[1024];
memset(szBuff,0x00,1024);
nData=Clientsock.Receive(szBuff,1024);
file.Write(szBuff,nData);
nSize+=nData;
}

delete szBuff;
Serversock.Close();
Clientsock.Close();
file.Close();
(dlg->GetDlgItem(IDC_RECVDATA))->EnableWindow(TRUE);
sprintf_s(errBuf,"文件接收成功...\r\n時間:%d年%d月%d日 %2d:%2d:%2d \r\n",t.wYear,t.wMonth,t.wDay,
t.wHour,t.wMinute,t.wSecond);
int len = strlen(errBuf);
logErrorfile.Write(errBuf,len);
//AfxMessageBox(_T("文件接收成功..."));
break;
}
}
return 0;
}

❷ MFC是什麼意思

MFC (Microsoft Foundation Class Library)中的各種類結合起來構成了一個應用程序框架,它的目的就是讓程序員在此基礎上來建立Windows下的應用程序,這是一種相對SDK來說更為簡單的方法。因為總體上,MFC框架定義了應用程序的輪廓,並提供了用戶介面的標准實現方法,程序員所要做的就是通過預定義的介面把具體應用程序特有的東西填入這個輪廓。Microsoft Visual C++提供了相應的工具來完成這個工作:AppWizard可以用來生成初步的框架文件(代碼和資源等);資源編輯器用於幫助直觀地設計用戶介面;ClassWizard用來協助添加代碼到框架文件;最後,編譯,則通過類庫實現了應用程序特定的邏輯。

封裝

構成MFC框架的是MFC類庫。MFC類庫是C++類庫。這些類或者封裝了Win32應用程序編程介面,或者封裝了應用程序的概念,或者封裝了OLE特性,或者封裝了ODBC和DAO數據訪問的功能,等等,分述如下。

(1)對Win32應用程序編程介面的封裝

用一個C++ Object來包裝一個Windows Object。例如:class CWnd是一個C++ window object,它把Windows window(HWND)和Windows window有關的API函數封裝在C++ window object的成員函數內,後者的成員變數m_hWnd就是前者的窗口句柄。

(2)對應用程序概念的封裝

使用SDK編寫Windows應用程序時,總要定義窗口過程,登記Windows Class,創建窗口,等等。MFC把許多類似的處理封裝起來,替程序員完成這些工作。另外,MFC提出了以文檔-視圖為中心的編程模式,MFC類庫封裝了對它的支持。文檔是用戶操作的數據對象,視圖是數據操作的窗口,用戶通過它處理、查看數據。

(3)對COM/OLE特性的封裝

OLE建立在COM模型之上,由於支持OLE的應用程序必須實現一系列的介面(Interface),因而相當繁瑣。MFC的OLE類封裝了OLE API大量的復雜工作,這些類提供了實現OLE的更高級介面。

(4)對ODBC功能的封裝

以少量的能提供與ODBC之間更高級介面的C++類,封裝了ODBC API的大量的復雜的工作,提供了一種資料庫編程模式。

繼承

首先,MFC抽象出眾多類的共同特性,設計出一些基類作為實現其他類的基礎。這些類中,最重要的類是CObject和CCmdTarget。CObject是MFC的根類,絕大多數MFC類是其派生的,包括CCmdTarget。CObject 實現了一些重要的特性,包括動態類信息、動態創建、對象序列化、對程序調試的支持,等等。所有從CObject派生的類都將具備或者可以具備CObject所擁有的特性。CCmdTarget通過封裝一些屬性和方法,提供了消息處理的架構。MFC中,任何可以處理消息的類都從CCmdTarget派生。

針對每種不同的對象,MFC都設計了一組類對這些對象進行封裝,每一組類都有一個基類,從基類派生出眾多更具體的類。這些對象包括以下種類:窗口對象,基類是CWnd;應用程序對象,基類是CwinThread;文檔對象,基類是Cdocument,等等。

程序員將結合自己的實際,從適當的MFC類中派生出自己的類,實現特定的功能,達到自己的編程目的。

虛擬函數和動態約束

MFC以「C++」為基礎,自然支持虛擬函數和動態約束。但是作為一個編程框架,有一個問題必須解決:如果僅僅通過虛擬函數來支持動態約束,必然導致虛擬函數表過於臃腫,消耗內存,效率低下。例如,CWnd封裝 Windows窗口對象時,每一條Windows消息對應一個成員函數,這些成員函數為派生類所繼承。如果這些函數都設計成虛擬函數,由於數量太多,實現起來不現實。於是,MFC建立了消息映射機制,以一種富有效率、便於使用的手段解決消息處理函數的動態約束問題。

這樣,通過虛擬函數和消息映射,MFC類提供了豐富的編程介面。程序員繼承基類的同時,把自己實現的虛擬函數和消息處理函數嵌入MFC的編程框架。MFC編程框架將在適當的時候、適當的地方來調用程序的代碼。本書將充分的展示MFC調用虛擬函數和消息處理函數的內幕,讓讀者對MFC的編程介面有清晰的理解。

MFC的宏觀框架體系

如前所述,MFC實現了對應用程序概念的封裝,把類、類的繼承、動態約束、類的關系和相互作用等封裝起來。這樣封裝的結果對程序員來說,是一套開發模板(或者說模式)。針對不同的應用和目的,程序員採用不同的模板。例如,SDI應用程序的模板,MDI應用程序的模板,規則DLL應用程序的模板,擴展DLL應用程序的模板,OLE/ACTIVEX應用程序的模板,等等。

這些模板都採用了以文檔-視為中心的思想,每一個模板都包含一組特定的類。典型的MDI應用程序的構成將在下一節具體討論。

為了支持對應用程序概念的封裝,MFC內部必須作大量的工作。例如,為了實現消息映射機制,MFC編程框架必須要保證首先得到消息,然後按既定的方法進行處理。又如,為了實現對DLL編程的支持和多線程編程的支持,MFC內部使用了特別的處理方法,使用模塊狀態、線程狀態等來管理一些重要信息。雖然,這些內部處理對程序員來說是透明的,但是,懂得和理解MFC內部機制有助於寫出功能靈活而強大的程序。

總之,MFC封裝了Win32 API,OLE API,ODBC API等底層函數的功能,並提供更高一層的介面,簡化了Windows編程。同時,MFC支持對底層API的直接調用。

MFC提供了一個Windows應用程序開發模式,對程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,預定義或實現了許多事件和消息處理,等等。框架或者由其本身處理事件,不依賴程序員的代碼;或者調用程序員的代碼來處理應用程序特定的事件。

MFC是C++類庫,程序員就是通過使用、繼承和擴展適當的類來實現特定的目的。例如,繼承時,應用程序特定的事件由程序員的派生類來處理,不感興趣的由基類處理。實現這種功能的基礎是C++對繼承的支持,對虛擬函數的支持,以及MFC實現的消息映射機制。

❸ 如何用MFC實現網路編程

一.客戶端
1.創建一個DialogBased項目:CSockClient。
2.設計對話框
去掉Ok和Cancle兩個按鈕,增加ID_Connect(連接)、ID_Send(發送)、ID_Exit(關閉)按鈕,增加ListBox控制項IDC_LISTMSG和Edit控制項IDC_EDITMSG,並按下表在ClassWizard中為CCSockClientDlg類添加變數。
ControlIDTypeMember
IDC_EDITMSGCEditm_MSG
IDC_LISTMSGClistBoxm_MSGS
3.CAsyncSocket類用DoCallBack函數處理MFC消息,當一個網路事件發生時,DoCallBack函數按網路事件類型:FD_READ、FD_WRITE、FD_ACCEPT、FD_CONNECT分別調用OnReceive、OnSend、OnAccept、OnConnect函數。
由於MFC把這些事件處理函數定義為虛函數,所以要生成一個新的C++類,以重載這些函數,做法如下:以Public方式繼承CAsyncSocket類,生成新類MySock;為MySock類添加虛函數OnReceive、OnConnect、OnSend。
4.在MySock.ccp中添加以下代碼
#include"CSockClient.h"
#include"CSockClientDlg.h"
5.在MySock.h中添加以下代碼
public:
BOOLm_bConnected;//是否連接
UINTm_nLength;//消息長度
charm_szBuffer[4096];//消息緩沖區
6.在MySock.ccp中重載各函數
MySock::MySock()
{
m_nLength=0;
memset(m_szBuffer,0,sizeof(m_szBuffer));
m_bConnected=FALSE;
}
MySock::~MySock()
{
//關閉套接字
if(m_hSocket!=INVALID_SOCKET)
Close();
}
voidMySock::OnReceive(intnErrorCode)
{
m_nLength=Receive(m_szBuffer,sizeof(m_szBuffer),0);
//下面兩行代碼用來獲取對話框指針
CCSockClientApp*pApp=(CCSockClientApp*)AfxGetApp();
CCSockClientDlg*pDlg=(CCSockClientDlg*)pApp->m_pMainWnd;
pDlg->m_MSGS.InsertString(0,m_szBuffer);
memset(m_szBuffer,0,sizeof(m_szBuffer));
CAsyncSocket::OnReceive(nErrorCode);
}
voidMySock::OnSend(intnErrorCode)
{
Send(m_szBuffer,m_nLength,0);
m_nLength=0;
memset(m_szBuffer,0,sizeof(m_szBuffer));
//繼續提請一個「讀」的網路事件,接收Server消息
AsyncSelect(FD_READ);
CAsyncSocket::OnSend(nErrorCode);
}
voidMySock::OnConnect(intnErrorCode)
{
if(nErrorCode==0)
{
m_bConnected=TRUE;
CCSockClientApp*pApp=(CCSockClientApp*)AfxGetApp();
CCSockClientDlg*pDlg=(CCSockClientDlg*)pApp->m_pMainWnd;
memcpy(m_szBuffer,"Connectedto",13);
strncat(m_szBuffer,pDlg->m_szServerAdr,
sizeof(pDlg->m_szServerAdr));
pDlg->m_MSGS.InsertString(0,m_szBuffer);
AsyncSelect(FD_READ);////提請一個「讀」的網路事件,准備接收
}
CAsyncSocket::OnConnect(nErrorCode);
}
7.新建對話框IDD_Addr,用來輸入IP地址和Port;生成新類CAddrDlg。增加兩個Edit控制項:IDC_Addr、IDC_Port按下表在ClassWizard中為CAddrDlg類添加變數。
ControlIDTypeMember
IDC_AddrCStringm_Addr
IDC_PortIntm_Port
8.在CSockClientDlg.ccp中添加代碼:
#include"AddrDlg.h"
protected:
intTryCount;
MySockm_clientSocket;
UINTm_szPort;
public:
charm_szServerAdr[256];
9.雙擊IDD_CSOCKCLIENT_DIALOG對話框中的「連接」按鈕,添加以下代碼:
voidCCSockClientDlg::OnConnect()
{
m_clientSocket.ShutDown(2);
m_clientSocket.m_hSocket=INVALID_SOCKET;
m_clientSocket.m_bConnected=FALSE;
CAddrDlgm_Dlg;
//默認埠1088
m_Dlg.m_Port=1088;
if(m_Dlg.DoModal()==IDOK&&!m_Dlg.m_Addr.IsEmpty())
{
memcpy(m_szServerAdr,m_Dlg.m_Addr,sizeof(m_szServerAdr));
m_szPort=m_Dlg.m_Port;
//建立計時器,每1秒嘗試連接一次,直到連上或TryCount>10
SetTimer(1,1000,NULL);
TryCount=0;
}
}
10.添加Windows消息WM_TIMER響應函數OnTimer
voidCCSockClientDlg::OnTimer(UINTnIDEvent)
{
if(m_clientSocket.m_hSocket==INVALID_SOCKET)
{
BOOLbFlag=m_clientSocket.Create(0,SOCK_STREAM,FD_CONNECT);
if(!bFlag)
{
AfxMessageBox("SocketError!");
m_clientSocket.Close();
PostQuitMessage(0);
return;
}
}
m_clientSocket.Connect(m_szServerAdr,m_szPort);
TryCount++;
if(TryCount>=10||m_clientSocket.m_bConnected)
{
KillTimer(1);
if(TryCount>=10)
AfxMessageBox("ConnectFailed!");
return;
}
CDialog::OnTimer(nIDEvent);
}
11.雙擊IDD_CSOCKCLIENT_DIALOG對話框中的「發送」按鈕,添加以下代碼:
voidCCSockClientDlg::OnSend()
{
if(m_clientSocket.m_bConnected)
{
m_clientSocket.m_nLength=m_MSG.GetWindowText
(m_clientSocket.m_szBuffer,sizeof(m_clientSocket.m_szBuffer));
m_clientSocket.AsyncSelect(FD_WRITE);
m_MSG.SetWindowText("");
}
}
12.雙擊IDD_CSOCKCLIENT_DIALOG對話框中的「關閉」按鈕,添加以下代碼:
voidCCSockClientDlg::OnExit()
{
//關閉Socket
m_clientSocket.ShutDown(2);
//關閉對話框
EndDialog(0);
}
12.運行此項目,連接時輸入主機名或IP均可,CAsyncSocket類會自動處理。
二.服務端
Server端的編程與Client端的類似,下面主要介紹他的Listen及Accept函數。
1.建立一個CNewSocket類,重載CAsyncSocket類的OnReceive、OnSend函數,如何進行信息的顯示和發送可以參考Client程序。本例中採用將收到信息原封不動發回的方法來實現Echo功能,代碼如下:
CNewSocket::OnReceive(intnErrorCOde)
{
m_nLength=Receive(m_szBuffer,sizeof(m_szBuffer),0);
//直接轉發消息
AsyncSelect(FD_WRITE);
}
CNewSocket::OnSend(intnErrorCode)
{
Send(m_szBuffer,m_nLength,0);
}
2.建立一個CMyServerSocket類,重載CAsyncSocket類的OnAccept函數代碼如下
在MyServerSocket.h中聲明變數
public::
CNewSocket*m_pSocket;
voidCMyServerSocket::OnAccept(intnErrorCode)
{
//偵聽到連接請求,調用Accept函數
CNewSocket*pSocket=newCNewSocket();
if(Accept(*pSocket))
{
pSocket->AsyncSelect(FD_READ);
m_pSocket=pSocket;
}
else
deletepSocket;
}
3.為對話框添加一個「偵聽」按鈕,添加如下代碼:
在CsockServerDlg.ccp中聲明變數
public:
CMyServerSocketm_srvrSocket;
voidCCSockServerDlg::OnListen()
{
if(m_srvrSocket.m_hSocket==INVALID_SOCKET)
{
BOOLbFlag=m_srvrSocket.Create
(UserPort,SOCK_STREAM,FD_ACCEPT);
if(!bFlag)
{
AfxMessageBox(「SocketError!」);
M_srvrSocket.Close();
PostQuitMessage(0);
Return;
}
}
//「偵聽」成功,等待連接請求
if(!m_srvrSocket。Listen(1))
{
intnErrorCode=m_srvrSocket.GetLastError();
if(nError!=WSAEWOULDBLOCK)
{
AfxMessageBox(「SocketError!」);
M_srvrSocket.Close();

❹ MFC 網路編程 - 實現自動更新的問題

用system(" ")命令吧,括弧中間是命令,能打開下面的東東,你試試notepad是txt的程序

dxdiag---查看配置

systeminfo -----查看系統信息
msconfig---------系統配置實用程序
winver---------檢查Windows版本
wmimgmt.msc----打開windows管理體系結構(WMI)
wupdmgr--------windows更新程序
wscript--------windows腳本宿主設置
write----------寫字板
winmsd---------系統信息
wiaacmgr-------掃描儀和照相機向導
winchat--------XP自帶區域網聊天

mem.exe--------顯示內存使用情況

mspaint--------畫圖板
mstsc----------遠程桌面連接
mplayer2-------媒體播放機
magnify--------放大鏡實用程序
mmc------------打開控制台
mobsync--------同步命令

drwtsn32------ 系統醫生
devmgmt.msc--- 設備管理器
dfrg.msc-------磁碟碎片整理程序
diskmgmt.msc---磁碟管理實用程序
dcomcnfg-------打開系統組件服務
ddeshare-------打開DDE共享設置
dvdplay--------DVD播放器

net stop messenger-----停止信使服務
net start messenger----開始信使服務
notepad--------打開記事本
nslookup-------網路管理的工具向導
ntbackup-------系統備份和還原
narrator-------屏幕「講述人」
ntmsmgr.msc----移動存儲管理器
ntmsoprq.msc---移動存儲管理員*作請求
netstat -an----(TC)命令檢查介面

syncapp--------創建一個公文包
sysedit--------系統配置編輯器
sigverif-------文件簽名驗證程序
sndrec32-------錄音機
shrpubw--------創建共享文件夾
secpol.msc-----本地安全策略
syskey---------系統加密,一旦加密就不能解開,保護windows xp系統的雙重密碼
services.msc---本地服務設置
Sndvol32-------音量控製程序
sfc.exe--------系統文件檢查器
sfc /scannow---windows文件保護

tsshutdn-------60秒倒計時關機命令
tourstart------xp簡介(安裝完成後出現的漫遊xp程序)
taskmgr--------任務管理器

eventvwr-------事件查看器
eudcedit-------造字程序
explorer-------打開資源管理器

packager-------對象包裝程序
perfmon.msc----計算機性能監測程序
progman--------程序管理器

regedit.exe----注冊表
rsop.msc-------組策略結果集
regedt32-------注冊表編輯器
rononce -p ----15秒關機
regsvr32 /u *.dll----停止dll文件運行
regsvr32 /u zipfldr.dll------取消ZIP支持

cmd.exe--------CMD命令提示符
chkdsk.exe-----Chkdsk磁碟檢查
certmgr.msc----證書管理實用程序
calc-----------啟動計算器
charmap--------啟動字元映射表
cliconfg-------SQL SERVER 客戶端網路實用程序
Clipbrd--------剪貼板查看器
conf-----------啟動netmeeting
compmgmt.msc---計算機管理
cleanmgr-------好東西整理
ciadv.msc------索引服務程序

osk------------打開屏幕鍵盤
odbcad32-------ODBC數據源管理器
oobe/msoobe /a----檢查XP是否激活
lusrmgr.msc----本機用戶和組
logoff---------注銷命令

iexpress-------木馬捆綁工具,系統自帶

Nslookup-------IP地址偵測器

fsmgmt.msc-----共享文件夾管理器

utilman--------輔助工具管理器

gpedit.msc-----組策略
xp下運行命令大全.

$Systemroot$Documents and Settingsusername 目錄下

appwiz.cpl------------添加刪除程序

control userpasswords2--------用戶帳戶設置

cleanmgr-------垃圾整理

CMD--------------命令提示符可以當作是 Windows 的一個附件,Ping,Convert 這些不能在圖形環境下 使用的功能要藉助它來完成。

cmd------jview察看Java虛擬機版本。

command.com------調用的則是系統內置的 NTVDM,一個 DOS虛擬機。它完全是一個類似 Virtual PC 的 虛擬環境,和系統本身聯系不大。當我們在命令提示符下運行 DOS 程序時,實際上也 是自動轉移到 NTVDM虛擬機下,和 CMD 本身沒什麼關系。

calc-----------啟動計算器

chkdsk.exe-----Chkdsk磁碟檢查

compmgmt.msc---計算機管理

conf-----------啟動 netmeeting

control userpasswords2-----User Account 許可權設置

devmgmt.msc--- 設備管理器

diskmgmt.msc---磁碟管理實用程序

dfrg.msc-------磁碟碎片整理程序

drwtsn32------ 系統醫生

dvdplay--------啟動Media Player

dxdiag-----------DirectX Diagnostic Tool

gpedit.msc-------組策略編輯器

gpupdate /target:computer /force 強制刷新組策略

eventvwr.exe-----事件查看器

explorer-------打開資源管理器

logoff---------注銷命令

lusrmgr.msc----本機用戶和組

msinfo32---------系統信息

net start (servicename)----啟動該服務

net stop (servicename)-----停止該服務

notepad--------打開記事本

nusrmgr.cpl-------同control userpasswords,打開用戶帳戶控制面板

Nslookup-------IP地址偵測器

oobe/msoobe /a----檢查XP是否激活

perfmon.msc----計算機性能監測程序

progman--------程序管理器

route print------查看路由表

rononce -p ----15秒關機

rsop.msc-------組策略結果集
5回答者: m584880952 - 助理 二級 3-3 02:37
我來評論>> 相關內容
? WINDOWS XP 運行命令詳解 介紹每個命令的用法
? windows-xp運行命令
? WINDOWS XP運行命令都有什?
? 必備資料 103個Windows XP運行命令
? 103個Windows XP運行命令
更多相關問題>>
查看同主題問題:命令
其他回答 共 3 條
開始→運行→輸入的命令集錦

你可以
命令行下輸入 help 就可以看到很多系統命令,每個命令得用法 例如 ping /? 可以獲取系統幫助
gpedit.msc-------------------------組策略
sndrec32-------------------------錄音機
nslookup-------------------------ip地址偵測器
explorer-------------------------打開資源管理器
logoff--------------------------注銷命令
tsshutdn-------------------------60秒倒計時關機命令
lusrmgr.msc-------------------------本機用戶和組
services.msc-------------------------本地服務設置
oobe/msoobe /a----------------------檢查xp是否激活
notepad--------------------------打開記事本
cleanmgr-------------------------垃圾整理
net start messenger-----------------開始信使服務
compmgmt.msc-------------------------計算機管理
net stop messenger-----------------停止信使服務
conf-------------------------啟動
dvdplay-------------------------dvd播放器
charmap-------------------------啟動字元映射表
diskmgmt.msc-------------------------磁碟管理實用程序
calc-------------------------啟動計算器
dfrg.msc-------------------------磁碟碎片整理程序
chkdsk.exe-------------------------chkdsk磁碟檢查
devmgmt.msc--- ----------------------設備管理器
regsvr32 /u *.dll-------------------停止dll文件運行
drwtsn32------ -------------------系統醫生
rononce -p ------------------------15秒關機
dxdiag-------------------------檢查directx信息
regedt32-------------------------注冊表編輯器
msconfig.exe-------------------------系統配置實用程序
rsop.msc-------------------------組策略結果集
mem.exe-------------------------顯示內存使用情況
regedit.exe-------------------------注冊表
winchat-------------------------xp自帶區域網聊天
progman-------------------------程序管理器
winmsd-------------------------系統信息
perfmon.msc-------------------------計算機性能監測程序
winver-------------------------檢查windows版本
sfc /scannow-----------------------掃描錯誤並復原
winver-------------------------檢查windows版本
wmimgmt.msc-------------------------打開windows管理體系結構
wupdmgr-------------------------windows更新程序
w腳本---------------------------windows腳本宿主設置
write-------------------------寫字板
winmsd-------------------------系統信息
wiaacmgr-------------------------掃描儀和照相機向導
winchat-------------------------xp自帶區域網聊天
mem.exe-------------------------顯示內存使用情況
msconfig.exe-------------------------系統配置實用程序
mplayer2-------------------------簡易
mspaint-------------------------畫圖板
mstsc-------------------------遠程桌面連接
mplayer2-------------------------媒體播放機
magnify-------------------------放大鏡實用程序
mmc-------------------------打開控制台
mobsync-------------------------同步命令
dxdiag-------------------------檢查directx信息
drwtsn32------------------------- 系統醫生
devmgmt.msc-?----------------------設備管理器
dfrg.msc-------------------------磁碟碎片整理程序
diskmgmt.msc-------------------------磁碟管理實用程序
dcomcnfg-------------------------打開系統組件服務
ddeshare-------------------------打開dde共享設置
dvdplay-------------------------dvd播放器
net stop messenger-----------------停止信使服務
net start messenger-----------------開始信使服務
notepad-------------------------打開記事本
nslookup-------------------------網路管理的工具向導
ntbackup-------------------------系統備份和還原
narrator-------------------------屏幕「講述人」
nyessmgr.msc-------------------------移動存儲管理器
nyessoprq.msc-------------------------移動存儲管理員操作請求
netstat -an------------------------(tc)命令檢查介面
syncapp-------------------------創建一個公文包
sysedit-------------------------系統配置編輯器
sigverif-------------------------文件簽名驗證程序
sndrec32-------------------------錄音機
shrpubw-------------------------創建共享文件夾
secpol.msc-----====================本地安全策略
syskey---------================系統加密,一旦加密就不能解開,保護windows xp系統的雙重密碼
services.msc---======================本地服務設置
sndvol32-------==================音量控製程序
sfc.exe--------=================系統文件檢查器
sfc /scannow---======================windows文件保護
tsshutdn-------==================60秒倒計時關機命令
tourstart------===================xp簡介(安裝完成後出現的漫遊xp程序)
taskmgr--------=================任務管理器
eventvwr-------==================事件查看器
eudcedit-------==================造字程序
explorer-------==================打開資源管理器
packager-------==================對象包裝程序
perfmon.msc----=====================計算機性能監測程序
progman--------=================程序管理器
regedit.exe----=====================注冊表
rsop.msc-------==================組策略結果集
regedt32-------==================注冊表編輯器
rononce -p ----====================15秒關機
regsvr32 /u *.dll----===============停止dll文件運行
regsvr32 /u zipfldr.dll------=====取消zip支持
cmd.exe--------=================cmd命令提示符
chkdsk.exe-----====================chkdsk磁碟檢查
ceryesgr.msc----=====================證書管理實用程序
calc-----------==============啟動計算器
charmap--------=================啟動字元映射表
cliconfg-------==================sql server 客戶端網路實用程序
clipbrd--------=================剪貼板查看器
conf-----------==============啟動
compmgmt.msc---======================計算機管理
cleanmgr-------==================垃圾整理
ciadv.msc------===================索引服務程序
osk------------=============打開屏幕鍵盤
odbcad32-------==================odbc數據源管理器
oobe/msoobe /a----==================檢查xp是否激活
lusrmgr.msc----=====================本機用戶和組
logoff---------================注銷命令
iexpress-------==================木馬捆綁工具,系統自帶
nslookup-------==================ip地址偵測器
fsmgmt.msc-----====================共享文件夾管理器
utilman--------=================輔助工具管理器

❺ 如何進行MFC資料庫編程

MFC資料庫編程包含如下:
首先,你要選擇使用什麼方式連接資料庫,有ODBC,ADO等,
其他,就是sql語句操作資料庫了,對後是怎麼存儲操作數據。

❻ mfc到底是什麼意思 有人可以解釋的詳細點嗎 最好是基礎點 能聽懂的 謝謝

早些時候的windows程序都是用API來寫的,從c語言的角度來看,一個API其實就是一個函數,windows系統是封閉的,所以你不能自己編函數來調用系統資源,只能用微軟給你的函數(即API)來做。現在微軟為了做C++平台,直接把這些API和windows系統變數包裝成現成的類,供使用者來使用。他包裝出來的所有這些類,形成一個類庫,就是MFC。其實MFC就是windows上的C++。

寫c++程序的時候你要自己定義類、類成員、類成員的訪問許可權、繼承關系等等東西,現在微軟不用你自己去花大量的時間定義了,他直接幫你定義好,你只要建立一個類的對象,然後調用就可以了。「用MFC編程」意思就是讓你調用微軟給你的類庫來編程。

微軟的c語言系列編程里,你可能還會聽到SDK編程這個說法,其實也很好理解,MFC編程就是windows的c++編程,SDK編程就是windows的c語言編程。

如果你沒學過C和C++,那肯定怎麼也理解不了。

❼ MFC是什麼意思

MFC是微軟的VC++帶的視窗用的基本庫。
MFC編程就是調用這個基本庫,寫出類似於IE瀏覽器這種程序,就是用滑鼠,鍵盤為工具的人機會話式的程序。
學MFC的要點是會用visual Studio 建程序框架,用VC++語言添加程序內容,編譯和運行。關鍵要會VC++。

專門討論MFC的專業論壇:
microsoft.public.vc.mfc
comp.os.ms-windows.programmer.tools.mfc
microsoft.public.vc.mfc.docview

❽ MFC對話框編程問題

一.模態對話框和非模態對話框
Windows對話框分為兩類:模態對話框和非模態對話框。
模態對話框是這樣的對話框,當它彈出後,本應用程序其他窗口將不再接受用戶輸入,只有該對話框響應用戶輸入,在對它進行相應操作退出後,其他窗口才能繼續與用戶交互。
非模態對話框則是,它彈出後,本程序其他窗口仍能響應用戶輸入。非模態對話框一般用來顯示提示信息等。
大家對Windows系統很了解,相信這兩種對話框應該都遇到過。之前的加法計算器對話框其實就是模態對話框。
二.模態對話框是怎樣彈出的
畢竟加法計算器程序大部分都是MFC自動生成的,對話框怎麼彈出來的大家可能還不是很清楚。雞啄米下面簡單說說它是在哪裡彈出來的,再重新建一個新的對話框並彈出它,這樣大家實踐以後就能更靈活的使用模態對話框了。
大家打開Addition.cpp文件,可以看到CAdditionApp類有個InitInstance()函數,在MFC應用程序框架分析中提到過此函數,不過那是單文檔應用程序App類中的,函數體不太相同,但都是進行App類實例的初始化工作。

InitInstance()函數的後半部分有一段代碼就是定義對話框對象並彈出對話框的,雞啄米下面給出這段代碼並加以注釋:
C++代碼
CAdditionDlg dlg; // 定義對話框類CAdditionDlg的對象dlg
m_pMainWnd = &dlg; // 將dlg設為主窗口
INT_PTR nResponse = dlg.DoModal(); // 彈出對話框dlg,並將DoModal函數的返回值(退出時點擊按鈕的ID)賦值給nResponse
if (nResponse == IDOK) // 判斷返回值是否為OK按鈕(其ID為IDOK,雞啄米已經將它刪除)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL) // 判斷返回值是否為Cancel按鈕(其ID為IDCANCEL,雞啄米將它的Caption改為了逗退出地)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
彈出對話框比較關鍵的一個函數,就是對話框類的DoModal()函數。CDialog::DoModal()函數的原型為:
virtual INT_PTR DoModal();
返回值:整數值,指定了傳遞給CDialog::EndDialog(該函數用於關閉對話框)的nResult參數值。如果函數不能創建對話框,則返回-1;如果出現其它錯誤,則返回IDABORT。
調用了它對話框就會彈出,返回值是退出對話框時所點的按鈕的ID,比如,我們點了逗退出地按鈕,那麼DoModal返回值為IDCANCEL。
三.添加一個新對話框並彈出它
雞啄米再為加法計算器程序添加一個對話框,以在計算之前詢問用戶是否確定要進行計算。大家可以完整的看下對話框的添加和彈出過程。
1.根據逗創建對話框模板和修改對話框屬性地中所講的方法,在Resource View中的逗Dialog地上點右鍵選擇逗Insert Dialog地,創建一個新的對話框模板,修改其ID為IDD_TIP_DIALOG,Caption改為逗提示地,然後參考逗為對話框添加控制項地中所講,在對話框模板上添加一個靜態文本框(static text),Caption改為逗您確定要進行加法計算嗎看地,接下來修改OK按鈕的Caption為逗確定地,Cancel按鈕的Caption為逗取消地,最後調整各個控制項的位置和對話框的大小。最終的對話框模板如下圖:

2.根據逗創建對話框類和添加控制項變數地中創建對話框類的方法,在對話框模板上點右鍵選擇逗Add Class...地,彈出添加類的對話框,設置逗Class name地為CTipDlg,點逗OK地。在Solution Explorer中可以看到生成了CTipDlg類的頭文件TipDlg.h和源文件TipDlg.cpp。
3.我們要在點逗計算地按鈕之後彈出此提示對話框,那麼就要在逗計算地按鈕的消息處理函數OnBnClickedAddButton()中訪問提示對話框類,所以為了訪問CTipDlg類,在AdditionDlg.cpp中包含CTipDlg的頭文件:#include "TipDlg.h"。
4.修改OnBnClickedAddButton()的函數體,在所有代碼前,構造CTipDlg類的對象tipDlg,並通過語句tipDlg.DoModal();彈出對話框,最後判斷DoModal()函數的返回值是IDOK還是IDCANCEL來確定是否繼續進行計算。OnBnClickedAddButton()函數修改後如下:
C++代碼
void CAdditionDlg::OnBnClickedAddButton()
{
// TODO: Add your control notification handler code here
INT_PTR nRes; // 用於保存DoModal函數的返回值

CTipDlg tipDlg; // 構造對話框類CTipDlg的實例
nRes = tipDlg.DoModal(); // 彈出對話框
if (IDCANCEL == nRes) // 判斷對話框退出後返回值是否為IDCANCEL,如果是則return,否則繼續向下執行
return;

// 將各控制項中的數據保存到相應的變數
UpdateData(TRUE);

// 將被加數和加數的加和賦值給m_editSum
m_editSum = m_editSummand + m_editAddend;

// 根據各變數的值更新相應的控制項。和的編輯框會顯示m_editSum的值
UpdateData(FALSE);
}
5.測試。編譯運行程序後,在對話框上輸入被加數和加數,點逗計算地,彈出提示對話框詢問是否進行計算,如果選擇逗確定地,則提示對話框退出,並在主對話框上顯示被加數和加數的和,而如果選擇逗取消地,則提示對話框也會退出,但主對話框顯示的和不變,即沒有進行加法計算。

閱讀全文

與mfc組播編程相關的資料

熱點內容
文件夾側面目錄標簽怎麼製作 瀏覽:232
做程序員學什麼 瀏覽:320
pdfeditor教程 瀏覽:880
fortran把文件放入文件夾 瀏覽:709
程序員1年經驗不敢投簡歷 瀏覽:481
如何看電腦的源碼 瀏覽:897
找工作app軟體哪個好 瀏覽:96
信息管理網站源碼 瀏覽:439
小說app哪個好免費 瀏覽:224
域名在線加密 瀏覽:146
軟體編程西安交大 瀏覽:453
是不是串貨的奶粉查不到溯源碼的 瀏覽:825
北京dns伺服器雲主機 瀏覽:221
openldaplinux安裝 瀏覽:23
java取月的最後一天 瀏覽:10
騰訊雲伺服器多久退款 瀏覽:949
微信廣告植入系統源碼 瀏覽:922
一年級語文上冊pdf 瀏覽:315
好久不見app干什麼用的 瀏覽:143
壓縮包解壓碼對方可以更改嗎 瀏覽:256