影音先锋男人资源在线观看,精品国产日韩亚洲一区91,中文字幕日韩国产,2018av男人天堂,青青伊人精品,久久久久久久综合日本亚洲,国产日韩欧美一区二区三区在线

FTP客戶端與服務(wù)器設(shè)計(jì)文件傳輸設(shè)計(jì)

上傳人:仙*** 文檔編號:28642530 上傳時(shí)間:2021-09-04 格式:DOC 頁數(shù):19 大?。?32.01KB
收藏 版權(quán)申訴 舉報(bào) 下載
FTP客戶端與服務(wù)器設(shè)計(jì)文件傳輸設(shè)計(jì)_第1頁
第1頁 / 共19頁
FTP客戶端與服務(wù)器設(shè)計(jì)文件傳輸設(shè)計(jì)_第2頁
第2頁 / 共19頁
FTP客戶端與服務(wù)器設(shè)計(jì)文件傳輸設(shè)計(jì)_第3頁
第3頁 / 共19頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《FTP客戶端與服務(wù)器設(shè)計(jì)文件傳輸設(shè)計(jì)》由會員分享,可在線閱讀,更多相關(guān)《FTP客戶端與服務(wù)器設(shè)計(jì)文件傳輸設(shè)計(jì)(19頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、青海民族大學(xué) 課 程 設(shè) 計(jì) 題  目: FTP客戶端與服務(wù)器設(shè)計(jì) 院  系: 計(jì)算機(jī)學(xué)院 專 業(yè): 網(wǎng)絡(luò)工程 指導(dǎo)教師: 葉濤 班 級: 09網(wǎng)本 小組成員:張建彪、王梧萍、回春英、楊文蘭 2012年1月7日 1. 選題的意義與目的 本設(shè)計(jì)旨在利用Winsock 2.0簡單實(shí)現(xiàn)FTP(File Transfer Protocol,文件傳輸協(xié)議)的客戶端和服務(wù)器端程序。通過完成此設(shè)計(jì),了解Winsock

2、 API函數(shù)調(diào)用方法和一般網(wǎng)絡(luò)應(yīng)用程序的編程方法,理解FTP協(xié)議,掌握C/C++語言設(shè)計(jì)FTP協(xié)議軟件的基本技術(shù),為將來開發(fā)其他通信協(xié)議軟件打下堅(jiān)實(shí)基礎(chǔ)。 2.設(shè)計(jì)要求及內(nèi)容 2.1設(shè)計(jì)要求 (1)連入同一局域網(wǎng)的PC,每人一臺。 (2)PC裝有Windows操作系統(tǒng)、Visual C++ 6.0編譯器. (3)四人一組,一臺為服務(wù)器,其他做客戶機(jī)。 2.1設(shè)計(jì)內(nèi)容 計(jì)算機(jī)文件屬于文件的一種,與普通文件載體不同,計(jì)算機(jī)文件是以計(jì)算機(jī)硬盤為載體存儲在計(jì)算機(jī)上的信息集合。文件可以是文本文檔、圖片、程序等等。文件通常具有三個(gè)字母的文件擴(kuò)展名,用于指示文件類型(例如,圖片文件常常以

3、JPEG 格式保存并且文件擴(kuò)展名為 .jpg)。 主要步驟如下:1服務(wù)端接收文件,客戶端發(fā)送文件。 2 每個(gè)Socket連接同時(shí)只能夠傳輸一個(gè)文件。 3 可同時(shí)發(fā)送消息 3.關(guān)鍵技術(shù) 3.1 文件傳輸協(xié)議介紹 FTP 是File Transfer Protocol(文件傳輸協(xié)議)的英文簡稱,用于Internet上的控制文件的雙向傳輸。在實(shí)現(xiàn)的層面上,F(xiàn)TP又可理解為一個(gè)可用于文件傳輸?shù)目蛻魴C(jī)/服務(wù)器系統(tǒng)(c/s架構(gòu)),該系統(tǒng)包括客戶機(jī)端程序和服務(wù)器端程序,客戶端和服務(wù)器端通信規(guī)則為FTP協(xié)議。用戶通過客戶機(jī)程序向服務(wù)器程序發(fā)出命令請求,服務(wù)器程序執(zhí)行用戶所發(fā)出的命令,并將執(zhí)行的結(jié)果

4、返回到客戶機(jī)。比如說,用戶發(fā)出一條命令,要求服務(wù)器向用戶傳送某一個(gè)文件的一份拷貝,服務(wù)器會響應(yīng)這條命令,將指定文件送至用戶的機(jī)器上??蛻魴C(jī)程序接收到這個(gè)文件,將其存放在用戶目錄中。在通信協(xié)議的分層模型中,文件傳輸協(xié)議是在TCP(Transmission control Protocol,傳輸控制協(xié)議)之上的一個(gè)應(yīng)用層協(xié)議,應(yīng)用程序之間的通信需要用到傳輸層提供的字節(jié)流透明無誤傳輸服務(wù)。Windows操作系統(tǒng)具有TCP/IP協(xié)議棧,應(yīng)用程序可通過Winsock API函數(shù)的調(diào)用實(shí)現(xiàn)端到端透明數(shù)據(jù)鏈接的建立。 3.2 TCP/IP協(xié)議 TCP/IP協(xié)議并不完全符合OSI的七層參考模型。傳統(tǒng)的開放

5、式系統(tǒng)互連參考模型,是一種通信協(xié)議的7層抽象的參考模型,其中每一層執(zhí)行某一特定任務(wù)。該模型的目的是使各種硬件在相同的層次上相互通信。這7層是:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示層和應(yīng)用層。而TCP/IP通訊協(xié)議采用了4層的層級結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。這4層分別為:   應(yīng)用層:應(yīng)用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)、網(wǎng)絡(luò)遠(yuǎn)程訪問協(xié)議(Telnet)等?! ? 傳輸層:在此層中,它提供了節(jié)點(diǎn)間的數(shù)據(jù)傳送,應(yīng)用程序之間的通信服務(wù),主要功能是數(shù)據(jù)格式化、數(shù)據(jù)確認(rèn)和丟失重傳等。如傳輸控制協(xié)議(TCP)、用戶數(shù)據(jù)報(bào)協(xié)議

6、(UDP)等,TCP和UDP給數(shù)據(jù)包加入傳輸數(shù)據(jù)并把它傳輸?shù)较乱粚又?,這一層負(fù)責(zé)傳送數(shù)據(jù),并且確定數(shù)據(jù)已被送達(dá)并接收。   互連網(wǎng)絡(luò)層:負(fù)責(zé)提供基本的數(shù)據(jù)封包傳送功能,讓每一塊數(shù)據(jù)包都能夠到達(dá)目的主機(jī)(但不檢查是否被正確接收),如網(wǎng)際協(xié)議(IP)?! ? 網(wǎng)絡(luò)接口層(主機(jī)-網(wǎng)絡(luò)層):接收IP數(shù)據(jù)報(bào)并進(jìn)行傳輸,從網(wǎng)絡(luò)上接收物理幀,抽取IP數(shù)據(jù)報(bào)轉(zhuǎn)交給下一層,對實(shí)際的網(wǎng)絡(luò)媒體的管理,定義如何使用實(shí)際網(wǎng)絡(luò)(如Ethernet、Serial Line等)來傳送數(shù)據(jù)。 3.3 IP協(xié)議 網(wǎng)際協(xié)議IP是TCP/IP的心臟,也是網(wǎng)絡(luò)層中最重要的協(xié)議。IP層接收由更低層(網(wǎng)絡(luò)接口層例如以太網(wǎng)設(shè)備驅(qū)動程

7、序)發(fā)來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包是不可靠的,因?yàn)镮P并沒有做任何事情來確認(rèn)數(shù)據(jù)包是按順序發(fā)送的或者沒有被破壞。IP數(shù)據(jù)包中含有發(fā)送它的主機(jī)的地址(源地址)和接收它的主機(jī)的地址(目的地址)。  高層的TCP和UDP服務(wù)在接收數(shù)據(jù)包時(shí),通常假設(shè)包中的源地址是有效的。也可以這樣說,IP地址形成了許多服務(wù)的認(rèn)證基礎(chǔ),這些服務(wù)相信數(shù)據(jù)包是從一個(gè)有效的主機(jī)發(fā)送來的。IP確認(rèn)包含一個(gè)選項(xiàng),叫作IP source routing,可以用來指定一條源地址和目的地址之間的直接路徑。對于一些TCP和UDP的服務(wù)

8、來說,使用了該選項(xiàng)的IP包好像是從路徑上的最后一個(gè)系統(tǒng)傳遞過來的,而不是來自于它的真實(shí)地點(diǎn)。這個(gè)選項(xiàng)是為了測試而存在的,說明了它可以被用來欺騙系統(tǒng)來進(jìn)行平常是被禁止的連接。那么,許多依靠IP源地址做確認(rèn)的服務(wù)將產(chǎn)生問題并且會被非法入侵。 在Internet上連接的所有計(jì)算機(jī),從大型機(jī)到微型計(jì)算機(jī)都是以獨(dú)立的身份出現(xiàn),我們稱它為主機(jī)。為了實(shí)現(xiàn)各主機(jī)間的通信,每臺主機(jī)都必須有一個(gè)唯一的網(wǎng)絡(luò)地址。就好像每一個(gè)住宅都有唯一的門牌一樣,才不至于在傳輸資料時(shí)出現(xiàn)混亂。   Internet的網(wǎng)絡(luò)地址是指連入Internet網(wǎng)絡(luò)的計(jì)算機(jī)的地址編號。所以,在Internet網(wǎng)絡(luò)中,網(wǎng)絡(luò)地址唯一地標(biāo)識一臺計(jì)

9、算機(jī)。  我們都已經(jīng)知道,Internet是由幾千萬臺計(jì)算機(jī)互相連接而成的。而我們要確認(rèn)網(wǎng)絡(luò)上的每一臺計(jì)算機(jī),靠的就是能唯一標(biāo)識該計(jì)算機(jī)的網(wǎng)絡(luò)地址,這個(gè)地址就叫做IP(Internet Protocol的簡寫)地址,即用Internet協(xié)議語言表示的地址。   3.4 C/S構(gòu)架 C/S(Client/Server)結(jié)構(gòu),即大家熟知的客戶機(jī)和服務(wù)器結(jié)構(gòu)。它是軟件系統(tǒng)體系結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢,將任務(wù)合理分配到Client端和Server端來實(shí)現(xiàn),降低了系統(tǒng)的通訊開銷。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是Client/Server形式的兩層結(jié)構(gòu),由于現(xiàn)在的軟件應(yīng)用系統(tǒng)正在向分布

10、式的Web應(yīng)用發(fā)展,Web和Client/Server應(yīng)用都可以進(jìn)行同樣的業(yè)務(wù)處理,應(yīng)用不同的模塊共享邏輯組件;因此,內(nèi)部的和外部的用戶都可以訪問新的和現(xiàn)有的應(yīng)用系統(tǒng),通過現(xiàn)有應(yīng)用系統(tǒng)中的邏輯可以擴(kuò)展出新的應(yīng)用系統(tǒng)。這也就是目前應(yīng)用系統(tǒng)的發(fā)展方向。 3.5 客戶端(Client) 客戶端(Client)或稱為用戶端,是指與服務(wù)器相對應(yīng),為客戶提供本地服務(wù)的程序。一般安裝在普通的客戶機(jī)上,需要與服務(wù)端互相配合運(yùn)行。因特網(wǎng)發(fā)展以后,較常用的用戶端包括了如萬維網(wǎng)使用的網(wǎng)頁瀏覽器,收寄電子郵件時(shí)的電子郵件客戶端,以及即時(shí)通訊的客戶端軟件等。 3.6 服務(wù)器(Server) 服務(wù)器指一個(gè)管理資

11、源并為用戶提供服務(wù)的計(jì)算機(jī)軟件,通常分為文件服務(wù)器、數(shù)據(jù)庫服務(wù)器和應(yīng)用程序服務(wù)器。運(yùn)行以上軟件的計(jì)算機(jī)或計(jì)算機(jī)系統(tǒng)也被稱為服務(wù)器。相對于普通PC來說,服務(wù)器在穩(wěn)定性、安全性、性能等方面都要求更高,因此CPU、芯片組、內(nèi)存、磁盤系統(tǒng)、網(wǎng)絡(luò)等硬件和普通PC有所不同。 4.代碼程序 服務(wù)器端代碼 /////////////////////RecvDlg。cpp實(shí)施文件///////////////////////////////////// #include "stdafx.h" #include "Recv.h" #include "RecvDlg.h" #include

12、"SysUtils.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // CAboutDlg對話框用于應(yīng)用程序// class CAboutDlg : public CDialog { public: CAboutDlg(); // 對話數(shù)據(jù) //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA /

13、/ ClassWizard生成的虛擬函數(shù)覆蓋 //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX / DDV支持 //}}AFX_VIRTUAL // 實(shí)施程序 protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { /

14、/{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP

15、 END_MESSAGE_MAP() //////////////////////////////////////////////////////// // CRecvDlg對話框// CRecvDlg::CRecvDlg(CWnd* pParent /*=NULL*/) : CDialog(CRecvDlg::IDD, pParent) { //{{AFX_DATA_INIT(CRecvDlg) // 注意:ClassWizard添加成員初始化將在這里 //}}AFX_DATA_INIT // 注意LoadIcon不需要一個(gè)

16、后續(xù)DestroyIcon Win32中 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_pTcpServer1 = new CTcpServer(this); } CRecvDlg::~CRecvDlg(void) { delete m_pTcpServer1; m_pTcpServer1 = NULL; } void CRecvDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(

17、CRecvDlg) DDX_Control(pDX, IDC_CONN_COUNT, m_ctlCnnCount); DDX_Control(pDX, IDC_INFO1, m_ctlInfo1); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CRecvDlg, CDialog) //{{AFX_MSG_MAP(CRecvDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_CANCEL_RECV, OnCancelRecv)

18、 ON_BN_CLICKED(IDC_CLOSE_CNN, OnCloseCnn) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() /////////////////////////////////////////////////////////// // CRecvDlg消息處理// BOOL CRecvDlg::OnInitDialog() { CDialog::OnInitDialog(); // 加上“關(guān)于…“菜單項(xiàng)目系統(tǒng)菜單。 // IDM_ABOUTBOX必須在系

19、統(tǒng)指揮的范圍。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARA

20、TOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 這個(gè)對話框設(shè)置圖標(biāo)。這是不是自動的框架 // 當(dāng)應(yīng)用程序的主窗口是沒有一個(gè)對話框 SetIcon(m_hIcon, TRUE); // 定義大圖標(biāo) SetIcon(m_hIcon, FALSE); // 定義小圖標(biāo) m_pTcpServer1->SetBindAddr(""); m_pTcpServer1->SetPort(8000); m_pTcpServer1->SetOnAccept(On

21、Accept); m_pTcpServer1->SetOnAcceptErr(OnAcceptErr); m_pTcpServer1->SetOnSocketConnect(OnSocketConnect); m_pTcpServer1->SetOnSocketDisconnect(OnSocketDisconnect); m_pTcpServer1->SetOnSocketSendErr(OnSocketSendErr); m_pTcpServer1->SetOnSocketRecvErr(OnSocketRecvErr); m_pTcpServer1->SetOnO

22、neNetMsg(OnOneNetMsg); m_pTcpServer1->SetOnRecvFileStart(OnRecvFileStart); m_pTcpServer1->SetOnRecvFileProgress(OnRecvFileProgress); m_pTcpServer1->SetOnRecvFileFail(OnRecvFileFail); m_pTcpServer1->SetOnRecvFileSucc(OnRecvFileSucc); m_pTcpServer1->SetOnRecvFileCancel(OnRecvFileCancel); i

23、f(!m_pTcpServer1->StartAccept()) { AfxMessageBox("開始服務(wù)失敗"); return FALSE; } return TRUE; // return TRUE unless you set the focus to a control } void CRecvDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoMo

24、dal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you wil need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CRecvDlg::OnPai

25、nt() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetCli

26、entRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized

27、 window. HCURSOR CRecvDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CRecvDlg::OnAccept(void *pNotifyObj, SOCKET hSocket, BOOL &bAccept) { CRecvDlg *pRecvDlg = (CRecvDlg *)pNotifyObj; CString strInfo; strInfo.Format("OnAccept-%d", hSocket); pRecvDlg->DispInfo(strInfo); }

28、 void CRecvDlg::OnAcceptErr(void *pNotifyObj, SOCKET hAccept) { CRecvDlg *pRecvDlg = (CRecvDlg *)pNotifyObj; CString strInfo; strInfo.Format("OnAcceptErr-%d", hAccept); pRecvDlg->DispInfo(strInfo); } void CRecvDlg::OnOneNetMsg(void *pNotifyObj, char *Msg, int nMsgLen) { CRecvDlg *

29、pRecvDlg = (CRecvDlg *)pNotifyObj; CString strInfo; char s[10240]; memcpy(s, Msg, nMsgLen); s[nMsgLen] = 0; strInfo = (LPCTSTR)s; pRecvDlg->DispInfo(strInfo); } void CRecvDlg::OnRecvFileStart(void *pNotifyObj, char *szPathName, BOOL &bRecv) { } void CRecvDlg::OnRecvFileProgress

30、(void *pNotifyObj, DWORD dwRecvedBytes, DWORD dwFileSize) { CRecvDlg *pRecvDlg = (CRecvDlg *)pNotifyObj; CString strInfo; strInfo.Format("%d / %d", dwRecvedBytes, dwFileSize); pRecvDlg->DispInfo(strInfo); } void CRecvDlg::OnRecvFileSucc(void *pNotifyObj, char *szPathName) { CRecvDlg

31、*pRecvDlg = (CRecvDlg *)pNotifyObj; CString strInfo = "OnRecvFileSucc"; pRecvDlg->DispInfo(strInfo); } void CRecvDlg::OnRecvFileFail(void *pNotifyObj, char *szPathName) { CRecvDlg *pRecvDlg = (CRecvDlg *)pNotifyObj; CString strInfo = "OnRecvFileFail"; pRecvDlg->DispInfo(strInfo); }

32、 void CRecvDlg::OnRecvFileCancel(void *pNotifyObj, char *szPathName) { CRecvDlg *pRecvDlg = (CRecvDlg *)pNotifyObj; CString strInfo = "OnRecvFileCancel"; pRecvDlg->DispInfo(strInfo); } void CRecvDlg::DispInfo(CString &strInfo) { m_ctlInfo1.SetWindowText(strInfo); } void CRecvDlg::

33、DispCnnCount(void) { CString strCnnCount; strCnnCount.Format("%d", m_pTcpServer1->GetClientCount()); m_ctlCnnCount.SetWindowText(strCnnCount); } void CRecvDlg::OnCancelRecv() { m_pTcpServer1->CancelAllRecvFile(); } void CRecvDlg::OnSocketConnect(void *pNotifyObj, SOCKET hSocket) {

34、CRecvDlg *pRecvDlg = (CRecvDlg *)pNotifyObj; CString strInfo; strInfo.Format("OnSocketConnect-%d", hSocket); pRecvDlg->DispInfo(strInfo); pRecvDlg->DispCnnCount(); } void CRecvDlg::OnSocketDisconnect(void *pNotifyObj, SOCKET hSocket) { CRecvDlg *pRecvDlg = (CRecvDlg *)pNotifyObj; CS

35、tring strInfo; strInfo.Format("OnSocketDisconnect-%d", hSocket); pRecvDlg->DispInfo(strInfo); pRecvDlg->DispCnnCount(); } void CRecvDlg::OnSocketSendErr(void *pNotifyObj, CServerClientSocket *pServerClientSocket) { CRecvDlg *pRecvDlg = (CRecvDlg *)pNotifyObj; CString strInfo = "OnSocket

36、SendErr"; pRecvDlg->DispInfo(strInfo); } void CRecvDlg::OnSocketRecvErr(void*pNotifyObj,CServerClientSocket *pServerClientSocket) { CRecvDlg *pRecvDlg = (CRecvDlg *)pNotifyObj; CString strInfo = "OnSocketRecvErr"; pRecvDlg->DispInfo(strInfo); } void CRecvDlg::OnCloseCnn() { }

37、void CRecvDlg::OnDestroy() { CDialog::OnDestroy(); m_pTcpServer1->CloseAllServerClientSocket(); } 客戶端代碼 ///////////////////////////// SendDlg。cpp實(shí)施文件////////////////////////////// #include "stdafx.h" #include "Send.h" #include "SendDlg.h" #ifdef _DEBUG #define new DEBUG_NEW

38、 #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif /////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////// CAboutDlg對話框用于應(yīng)用程序////////////////////////// class CAboutDlg : public CDialog { public: CAboutDlg();

39、 // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation

40、 protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAbo

41、utDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// ///////////////////// CSendDlg對話框///////////////////////

42、///////////////// CSendDlg::CSendDlg(CWnd* pParent /*=NULL*/) : CDialog(CSendDlg::IDD, pParent) { //{{AFX_DATA_INIT(CSendDlg) m_dwPackageSize = 0; m_strServerIp = _T(""); m_nPort = 0; m_strFileName = _T(""); m_strMsg = _T(""); //}}AFX_DATA_INIT // Note that LoadIcon does not re

43、quire a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_pTcpClient = new CTcpClient(this); } CSendDlg::~CSendDlg(void) { delete m_pTcpClient; } void CSendDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(C

44、SendDlg) DDX_Control(pDX, IDC_CNN_STATUS, m_ctlCnnStatus); DDX_Control(pDX, IDC_INFO, m_ctlInfo); DDX_Text(pDX, IDC_PACKAGE_SIZE, m_dwPackageSize); DDV_MinMaxInt(pDX, m_dwPackageSize, 1, 99996); DDX_Text(pDX, IDC_SERVER_IP, m_strServerIp); DDX_Text(pDX, IDC_PORT, m_nPort); DDX_Text(pDX

45、, IDC_FILE_NAME, m_strFileName); DDX_Text(pDX, IDC_MSG, m_strMsg); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CSendDlg, CDialog) //{{AFX_MSG_MAP(CSendDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_CONNECT, OnConnect) ON_BN_CLICKED(IDC_DISCONNECT, OnDiscon

46、nect) ON_BN_CLICKED(IDC_SEND, OnSendFile) ON_BN_CLICKED(IDC_SEND_MSG, OnSendMsg) ON_BN_CLICKED(IDC_CANCEL_SEND, OnCancelSend) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSendDlg message handlers

47、 BOOL CSendDlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (

48、pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does thi

49、s automatically // when the applications main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon m_strServerIp = "127.0.0.1"; m_nPort = 8000; m_dwPackageSize = 1024; m_strFileName = "d:\\a.pdf"; UpdateData(FALSE); m_pTcpCl

50、ient->SetOnSocketSendErr(OnSocketSendErr); m_pTcpClient->SetOnSocketRecvErr(OnSocketRecvErr); m_pTcpClient->SetOnSocketClose(OnSocketClose); m_pTcpClient->SetOnOneNetMsg(OnOneNetMsg); m_pTcpClient->SetOnSendFileSucc(OnSendFileSucc); m_pTcpClient->SetOnSendFileFail(OnSendFileFail); m_pTcp

51、Client->SetOnSendFileRefuseRecv(OnSendFileRefuseRecv); m_pTcpClient->SetOnSendFileCancelRecv(OnSendFileCancelRecv); m_pTcpClient->SetOnSendFileRecvFail(OnSendFileRecvFail); m_pTcpClient->SetOnSendFileProgress(OnSendFileProgress); return TRUE; // return TRUE unless you set the focus to a

52、control } void CSendDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below

53、// to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CSendDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(),

54、0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y

55、, m_hIcon); } else { CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CSendDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CSendDlg::OnConnect() { if(!UpdateData()) return;

56、 m_pTcpClient->SetAddr((char *)(LPCTSTR)m_strServerIp); m_pTcpClient->SetPort(m_nPort); m_pTcpClient->SetPackageSize(m_dwPackageSize); m_ctlCnnStatus.SetWindowText("請等待..."); if(!m_pTcpClient->Connect()) m_ctlCnnStatus.SetWindowText("連接失敗!"); else m_ctlCnnStatus.SetWindowText("已

57、連接"); } void CSendDlg::OnDisconnect() { m_pTcpClient->Disconnect(); m_ctlCnnStatus.SetWindowText("斷開連接"); } void CSendDlg::OnSendFile() { if(!UpdateData()) return; m_pTcpClient->SetPackageSize(m_dwPackageSize); if(!m_pTcpClient->SendFile((char *)(LPCTSTR)m_strFileName)) A

58、fxMessageBox("發(fā)生文件失敗"); } void CSendDlg::OnSendMsg(void) { char s[99999]; if(!UpdateData()) return; sprintf(s, "@00000001%s", m_strMsg); m_pTcpClient->SendNetMsg(s, strlen(s) - 6); } void CSendDlg::OnSocketSendErr(void *pNotifyObj, SOCKET hSocket) { CSendDlg *pSendDlg = (CSend

59、Dlg *)pNotifyObj; pSendDlg->m_ctlCnnStatus.SetWindowText("發(fā)送數(shù)據(jù)出錯(cuò)"); } void CSendDlg::OnSocketRecvErr(void *pNotifyObj, SOCKET hSocket) { CSendDlg *pSendDlg = (CSendDlg *)pNotifyObj; pSendDlg->m_ctlCnnStatus.SetWindowText("接收數(shù)據(jù)出錯(cuò)"); } void CSendDlg::OnSocketClose(void *pNotifyObj, SOCK

60、ET hSocket) { CSendDlg *pSendDlg = (CSendDlg *)pNotifyObj; pSendDlg->m_ctlCnnStatus.SetWindowText("斷開連接"); } void CSendDlg::OnOneNetMsg(void *pNotifyObj, char *Msg, int nMsgLen) { CSendDlg *pSendDlg = (CSendDlg *)pNotifyObj; char s[9999]; CString strInfo; strncpy(s, Msg, nMsgLen);

61、 s[nMsgLen] = 0; strInfo = s; pSendDlg->DispInfo(strInfo); } void CSendDlg::OnSendFileSucc(void *pNotifyObj, char *szPathName) { CSendDlg *pSendDlg = (CSendDlg *)pNotifyObj; pSendDlg->DispInfo("OnSendFileSucc"); } void CSendDlg::OnSendFileFail(void *pNotifyObj, char *szPathName) {

62、 CSendDlg *pSendDlg = (CSendDlg *)pNotifyObj; pSendDlg->DispInfo("OnSendFileFail"); } // 接收方拒絕接收文件 void CSendDlg::OnSendFileRefuseRecv(void *pNotifyObj, char *szPathName) { CSendDlg *pSendDlg = (CSendDlg *)pNotifyObj; pSendDlg->DispInfo("OnSendFileRefuseRecv"); } // 接收方拒絕文件 void CSend

63、Dlg::OnSendFileCancelRecv(void *pNotifyObj, char *szPathName) { CSendDlg *pSendDlg = (CSendDlg *)pNotifyObj; pSendDlg->DispInfo("OnSendFileCancelRecv"); } // 接收方取消接收 void CSendDlg::OnSendFileRecvFail(void *pNotifyObj, char *szPathName) { CSendDlg *pSendDlg = (CSendDlg *)pNotifyObj; pS

64、endDlg->DispInfo("OnSendFileRecvFail"); } void CSendDlg::OnSendFileProgress(void *pNotifyObj, int nSentBytes, int nTotalBytes) { CSendDlg *pSendDlg = (CSendDlg *)pNotifyObj; CString strInfo; strInfo.Format("%d / %d", nSentBytes, nTotalBytes); pSendDlg->DispInfo(strInfo); } void CSendDlg::DispInfo(CString strInfo) { m_ctlInfo.SetWindowText(strInfo); } void CSendDlg::OnCancelSend() { m_pTcpClient->CancelSendFile(); } void CSendDlg::OnDestroy() { CDialog::OnDestroy(); m_pTcpClient->Disconnect(); }

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!