FTP客戶端與服務(wù)器設(shè)計(jì)文件傳輸設(shè)計(jì)_第1頁
FTP客戶端與服務(wù)器設(shè)計(jì)文件傳輸設(shè)計(jì)_第2頁
FTP客戶端與服務(wù)器設(shè)計(jì)文件傳輸設(shè)計(jì)_第3頁
FTP客戶端與服務(wù)器設(shè)計(jì)文件傳輸設(shè)計(jì)_第4頁
FTP客戶端與服務(wù)器設(shè)計(jì)文件傳輸設(shè)計(jì)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

2、c,每人一臺(tái)。(2)pc裝有windows操作系統(tǒng)、visual c+ 6.0編譯器. (3)四人一組,一臺(tái)為服務(wù)器,其他做客戶機(jī)。2.1設(shè)計(jì)內(nèi)容計(jì)算機(jī)文件屬于文件的一種,與普通文件載體不同,計(jì)算機(jī)文件是以計(jì)算機(jī)硬盤為載體存儲(chǔ)在計(jì)算機(jī)上的信息集合。文件可以是文本文檔、圖片、程序等等。文件通常具有三個(gè)字母的文件擴(kuò)展名,用于指示文件類型(例如,圖片文件常常以 jpeg 格式保存并且文件擴(kuò)展名為 .jpg)。主要步驟如下:1服務(wù)端接收文件,客戶端發(fā)送文件。2 每個(gè)socket連接同時(shí)只能夠傳輸一個(gè)文件。3 可同時(shí)發(fā)送消息3.關(guān)鍵技術(shù)3.1 文件傳輸協(xié)議介紹ftp 是file transfer pro

3、tocol(文件傳輸協(xié)議)的英文簡(jiǎn)稱,用于internet上的控制文件的雙向傳輸。在實(shí)現(xiàn)的層面上,ftp又可理解為一個(gè)可用于文件傳輸?shù)目蛻魴C(jī)/服務(wù)器系統(tǒng)(c/s架構(gòu)),該系統(tǒng)包括客戶機(jī)端程序和服務(wù)器端程序,客戶端和服務(wù)器端通信規(guī)則為ftp協(xié)議。用戶通過客戶機(jī)程序向服務(wù)器程序發(fā)出命令請(qǐng)求,服務(wù)器程序執(zhí)行用戶所發(fā)出的命令,并將執(zhí)行的結(jié)果返回到客戶機(jī)。比如說,用戶發(fā)出一條命令,要求服務(wù)器向用戶傳送某一個(gè)文件的一份拷貝,服務(wù)器會(huì)響應(yīng)這條命令,將指定文件送至用戶的機(jī)器上??蛻魴C(jī)程序接收到這個(gè)文件,將其存放在用戶目錄中。在通信協(xié)議的分層模型中,文件傳輸協(xié)議是在tcp(transmission contro

4、l 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)的開放式系統(tǒng)互連參考模型,是一種通信協(xié)議的7層抽象的參考模型,其中每一層執(zhí)行某一特定任務(wù)。該模型的目的是使各種硬件在相同的層次上相互通信。這7層是:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層和應(yīng)用層。而tcp/ip通訊協(xié)議采用了4層的層級(jí)結(jié)構(gòu),每一層都呼叫它的下一層所提供

5、的網(wǎng)絡(luò)來完成自己的需求。這4層分別為:應(yīng)用層:應(yīng)用程序間溝通的層,如簡(jiǎn)單電子郵件傳輸(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é)議(udp)等,tcp和udp給數(shù)據(jù)包加入傳輸數(shù)據(jù)并把它傳輸?shù)较乱粚又?,這一層負(fù)責(zé)傳送數(shù)據(jù),并且確定數(shù)據(jù)已被送達(dá)并接收?;ミB網(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)行

6、傳輸,從網(wǎng)絡(luò)上接收物理幀,抽取ip數(shù)據(jù)報(bào)轉(zhuǎn)交給下一層,對(duì)實(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ū)動(dòng)程序)發(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ù)

7、在接收數(shù)據(jù)包時(shí),通常假設(shè)包中的源地址是有效的。也可以這樣說,ip地址形成了許多服務(wù)的認(rèn)證基礎(chǔ),這些服務(wù)相信數(shù)據(jù)包是從一個(gè)有效的主機(jī)發(fā)送來的。ip確認(rèn)包含一個(gè)選項(xiàng),叫作ip source routing,可以用來指定一條源地址和目的地址之間的直接路徑。對(duì)于一些tcp和udp的服務(wù)來說,使用了該選項(xiàng)的ip包好像是從路徑上的最后一個(gè)系統(tǒng)傳遞過來的,而不是來自于它的真實(shí)地點(diǎn)。這個(gè)選項(xiàng)是為了測(cè)試而存在的,說明了它可以被用來欺騙系統(tǒng)來進(jìn)行平常是被禁止的連接。那么,許多依靠ip源地址做確認(rèn)的服務(wù)將產(chǎn)生問題并且會(huì)被非法入侵。在internet上連接的所有計(jì)算機(jī),從大型機(jī)到微型計(jì)算機(jī)都是以獨(dú)立的身份出現(xiàn),我們稱

8、它為主機(jī)。為了實(shí)現(xiàn)各主機(jī)間的通信,每臺(tái)主機(jī)都必須有一個(gè)唯一的網(wǎng)絡(luò)地址。就好像每一個(gè)住宅都有唯一的門牌一樣,才不至于在傳輸資料時(shí)出現(xiàn)混亂。internet的網(wǎng)絡(luò)地址是指連入internet網(wǎng)絡(luò)的計(jì)算機(jī)的地址編號(hào)。所以,在internet網(wǎng)絡(luò)中,網(wǎng)絡(luò)地址唯一地標(biāo)識(shí)一臺(tái)計(jì)算機(jī)。我們都已經(jīng)知道,internet是由幾千萬臺(tái)計(jì)算機(jī)互相連接而成的。而我們要確認(rèn)網(wǎng)絡(luò)上的每一臺(tái)計(jì)算機(jī),靠的就是能唯一標(biāo)識(shí)該計(jì)算機(jī)的網(wǎng)絡(luò)地址,這個(gè)地址就叫做ip(internet protocol的簡(jiǎn)寫)地址,即用internet協(xié)議語言表示的地址。 3.4 c/s構(gòu)架c/s(client/server)結(jié)構(gòu),即大家熟知的客戶機(jī)和

9、服務(wù)器結(jié)構(gòu)。它是軟件系統(tǒng)體系結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),將任務(wù)合理分配到client端和server端來實(shí)現(xiàn),降低了系統(tǒng)的通訊開銷。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是client/server形式的兩層結(jié)構(gòu),由于現(xiàn)在的軟件應(yīng)用系統(tǒng)正在向分布式的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ù)器相對(duì)應(yīng),為客戶提供本地服

10、務(wù)的程序。一般安裝在普通的客戶機(jī)上,需要與服務(wù)端互相配合運(yùn)行。因特網(wǎng)發(fā)展以后,較常用的用戶端包括了如萬維網(wǎng)使用的網(wǎng)頁瀏覽器,收寄電子郵件時(shí)的電子郵件客戶端,以及即時(shí)通訊的客戶端軟件等。3.6 服務(wù)器(server)服務(wù)器指一個(gè)管理資源并為用戶提供服務(wù)的計(jì)算機(jī)軟件,通常分為文件服務(wù)器、數(shù)據(jù)庫服務(wù)器和應(yīng)用程序服務(wù)器。運(yùn)行以上軟件的計(jì)算機(jī)或計(jì)算機(jī)系統(tǒng)也被稱為服務(wù)器。相對(duì)于普通pc來說,服務(wù)器在穩(wěn)定性、安全性、性能等方面都要求更高,因此cpu、芯片組、內(nèi)存、磁盤系統(tǒng)、網(wǎng)絡(luò)等硬件和普通pc有所不同。4.代碼程序 服務(wù)器端代碼/recvdlg。cpp實(shí)施文件/#include stdafx.h#inclu

11、de recv.h#include recvdlg.h#include sysutils.h#ifdef _debug#define new debug_new#undef this_filestatic char this_file = _file_;#endif / caboutdlg對(duì)話框用于應(yīng)用程序/class caboutdlg : public cdialogpublic:caboutdlg(); / 對(duì)話數(shù)據(jù)/afx_data(caboutdlg)enum idd = idd_aboutbox ;/afx_data/ classwizard生成的虛擬函數(shù)覆蓋/afx_virtua

12、l(caboutdlg)protected:virtual void dodataexchange(cdataexchange* pdx); / ddx / ddv支持/afx_virtual / 實(shí)施程序protected:/afx_msg(caboutdlg)/afx_msgdeclare_message_map();caboutdlg:caboutdlg() : cdialog(caboutdlg:idd)/afx_data_init(caboutdlg)/afx_data_initvoid caboutdlg:dodataexchange(cdataexchange* pdx)cdia

13、log:dodataexchange(pdx);/afx_data_map(caboutdlg)/afx_data_mapbegin_message_map(caboutdlg, cdialog)/afx_msg_map(caboutdlg)/ no message handlers/afx_msg_mapend_message_map()/ / crecvdlg對(duì)話框/crecvdlg:crecvdlg(cwnd* pparent /*=null*/): cdialog(crecvdlg:idd, pparent)/afx_data_init(crecvdlg)/ 注意:classwizar

14、d添加成員初始化將在這里/afx_data_init/ 注意loadicon不需要一個(gè)后續(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

15、(crecvdlg)ddx_control(pdx, idc_conn_count, m_ctlcnncount);ddx_control(pdx, idc_info1, m_ctlinfo1);/afx_data_mapbegin_message_map(crecvdlg, cdialog)/afx_msg_map(crecvdlg)on_wm_syscommand()on_wm_paint()on_wm_querydragicon()on_bn_clicked(idc_cancel_recv, oncancelrecv)on_bn_clicked(idc_close_cnn, onclos

16、ecnn)on_wm_destroy()/afx_msg_mapend_message_map()/ / crecvdlg消息處理/bool crecvdlg:oninitdialog()cdialog:oninitdialog();/ 加上“關(guān)于“菜單項(xiàng)目系統(tǒng)菜單。/ idm_aboutbox必須在系統(tǒng)指揮的范圍。assert(idm_aboutbox & 0xfff0) = idm_aboutbox);assert(idm_aboutbox appendmenu(mf_separator);psysmenu-appendmenu(mf_string, idm_aboutbox, strab

17、outmenu);/ 這個(gè)對(duì)話框設(shè)置圖標(biāo)。這是不是自動(dòng)的框架/ 當(dāng)應(yīng)用程序的主窗口是沒有一個(gè)對(duì)話框seticon(m_hicon, true);/ 定義大圖標(biāo)seticon(m_hicon, false);/ 定義小圖標(biāo)m_ptcpserver1-setbindaddr();m_ptcpserver1-setport(8000);m_ptcpserver1-setonaccept(onaccept);m_ptcpserver1-setonaccepterr(onaccepterr);m_ptcpserver1-setonsocketconnect(onsocketconnect);m_ptcp

18、server1-setonsocketdisconnect(onsocketdisconnect);m_ptcpserver1-setonsocketsenderr(onsocketsenderr);m_ptcpserver1-setonsocketrecverr(onsocketrecverr);m_ptcpserver1-setononenetmsg(ononenetmsg);m_ptcpserver1-setonrecvfilestart(onrecvfilestart);m_ptcpserver1-setonrecvfileprogress(onrecvfileprogress);m_

19、ptcpserver1-setonrecvfilefail(onrecvfilefail);m_ptcpserver1-setonrecvfilesucc(onrecvfilesucc);m_ptcpserver1-setonrecvfilecancel(onrecvfilecancel);if(!m_ptcpserver1-startaccept()afxmessagebox(開始服務(wù)失敗);return false;return true; / return true unless you set the focus to a controlvoid crecvdlg:onsyscomma

20、nd(uint nid, lparam lparam)if (nid & 0xfff0) = idm_aboutbox)caboutdlg dlgabout;dlgabout.domodal();elsecdialog: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 automatic

21、ally done for you by the framework.void crecvdlg:onpaint() if (isiconic()cpaintdc dc(this); / device context for paintingsendmessage(wm_iconerasebkgnd, (wparam) dc.getsafehdc(), 0);/ center icon in client rectangleint cxicon = getsystemmetrics(sm_cxicon);int cyicon = getsystemmetrics(sm_cyicon);crec

22、t rect;getclientrect(&rect);int x = (rect.width() - cxicon + 1) / 2;int y = (rect.height() - cyicon + 1) / 2;/ draw the icondc.drawicon(x, y, m_hicon);elsecdialog:onpaint();/ the system calls this to obtain the cursor to display while the user drags/ the minimized window.hcursor crecvdlg:onquerydrag

23、icon()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);void crecvdlg:onaccepterr(void *pnotifyobj, socket haccept)crecvdlg *precv

24、dlg = (crecvdlg *)pnotifyobj;cstring strinfo;strinfo.format(onaccepterr-%d, haccept);precvdlg-dispinfo(strinfo);void crecvdlg:ononenetmsg(void *pnotifyobj, char *msg, int nmsglen)crecvdlg *precvdlg = (crecvdlg *)pnotifyobj;cstring strinfo;char s10240;memcpy(s, msg, nmsglen);snmsglen = 0;strinfo = (l

25、pctstr)s;precvdlg-dispinfo(strinfo);void crecvdlg:onrecvfilestart(void *pnotifyobj, char *szpathname, bool &brecv)void crecvdlg:onrecvfileprogress(void *pnotifyobj, dword dwrecvedbytes, dword dwfilesize)crecvdlg *precvdlg = (crecvdlg *)pnotifyobj;cstring strinfo;strinfo.format(%d / %d, dwrecvedbytes

26、, dwfilesize);precvdlg-dispinfo(strinfo);void crecvdlg:onrecvfilesucc(void *pnotifyobj, char *szpathname)crecvdlg *precvdlg = (crecvdlg *)pnotifyobj;cstring strinfo = onrecvfilesucc;precvdlg-dispinfo(strinfo);void crecvdlg:onrecvfilefail(void *pnotifyobj, char *szpathname)crecvdlg *precvdlg = (crecv

27、dlg *)pnotifyobj;cstring strinfo = onrecvfilefail;precvdlg-dispinfo(strinfo);void crecvdlg:onrecvfilecancel(void *pnotifyobj, char *szpathname)crecvdlg *precvdlg = (crecvdlg *)pnotifyobj;cstring strinfo = onrecvfilecancel;precvdlg-dispinfo(strinfo);void crecvdlg:dispinfo(cstring &strinfo)m_ctlinfo1.

28、setwindowtext(strinfo);void crecvdlg: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)crec

29、vdlg *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;cstring strinfo;strinfo.format(onsocket

30、disconnect-%d, hsocket);precvdlg-dispinfo(strinfo);precvdlg-dispcnncount();void crecvdlg:onsocketsenderr(void *pnotifyobj, cserverclientsocket *pserverclientsocket)crecvdlg *precvdlg = (crecvdlg *)pnotifyobj;cstring strinfo = onsocketsenderr;precvdlg-dispinfo(strinfo);void crecvdlg:onsocketrecverr(v

31、oid*pnotifyobj,cserverclientsocket *pserverclientsocket)crecvdlg *precvdlg = (crecvdlg *)pnotifyobj;cstring strinfo = onsocketrecverr;precvdlg-dispinfo(strinfo);void crecvdlg:onclosecnn() void crecvdlg:ondestroy() cdialog:ondestroy();m_ptcpserver1-closeallserverclientsocket();客戶端代碼 / senddlg。cpp實(shí)施文件

32、/#include stdafx.h#include send.h#include senddlg.h#ifdef _debug#define new debug_new#undef this_filestatic char this_file = _file_;#endif/ caboutdlg對(duì)話框用于應(yīng)用程序/class caboutdlg : public cdialogpublic:caboutdlg();/ dialog data/afx_data(caboutdlg)enum idd = idd_aboutbox ;/afx_data/ classwizard generated

33、 virtual function overrides/afx_virtual(caboutdlg)protected:virtual void dodataexchange(cdataexchange* pdx); / ddx/ddv support/afx_virtual/ implementationprotected:/afx_msg(caboutdlg)/afx_msgdeclare_message_map();caboutdlg:caboutdlg() : cdialog(caboutdlg:idd)/afx_data_init(caboutdlg)/afx_data_initvo

34、id caboutdlg:dodataexchange(cdataexchange* pdx)cdialog:dodataexchange(pdx);/afx_data_map(caboutdlg)/afx_data_mapbegin_message_map(caboutdlg, cdialog)/afx_msg_map(caboutdlg)/ no message handlers/afx_msg_mapend_message_map()/ csenddlg對(duì)話框/csenddlg:csenddlg(cwnd* pparent /*=null*/): cdialog(csenddlg:idd

35、, 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 require a subsequent destroyicon in win32m_hicon = afxgetapp()-loadicon(idr_mainframe);m_ptcpclient = new ctcpclient(this);csenddlg:

36、csenddlg(void)delete m_ptcpclient;void csenddlg:dodataexchange(cdataexchange* pdx)cdialog:dodataexchange(pdx);/afx_data_map(csenddlg)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_dwpackages

37、ize, 1, 99996);ddx_text(pdx, idc_server_ip, m_strserverip);ddx_text(pdx, idc_port, m_nport);ddx_text(pdx, idc_file_name, m_strfilename);ddx_text(pdx, idc_msg, m_strmsg);/afx_data_mapbegin_message_map(csenddlg, cdialog)/afx_msg_map(csenddlg)on_wm_syscommand()on_wm_paint()on_wm_querydragicon()on_bn_cl

38、icked(idc_connect, onconnect)on_bn_clicked(idc_disconnect, ondisconnect)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_mapend_message_map()/ csenddlg message handlersbool csenddlg:oninitdialog()cdialog:onin

39、itdialog();/ 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 appendmenu(mf_separator);psysmenu-appendmenu(mf_string, idm_aboutbox, straboutmenu);/ set the icon for this dialog. the framework does

40、 this automatically/ when the applications main window is not a dialogseticon(m_hicon, true);/ set big iconseticon(m_hicon, false);/ set small iconm_strserverip = ;m_nport = 8000;m_dwpackagesize = 1024;m_strfilename = d:a.pdf;updatedata(false);m_ptcpclient-setonsocketsenderr(onsocketsenderr

41、);m_ptcpclient-setonsocketrecverr(onsocketrecverr);m_ptcpclient-setonsocketclose(onsocketclose);m_ptcpclient-setononenetmsg(ononenetmsg);m_ptcpclient-setonsendfilesucc(onsendfilesucc);m_ptcpclient-setonsendfilefail(onsendfilefail);m_ptcpclient-setonsendfilerefuserecv(onsendfilerefuserecv);m_ptcpclie

42、nt-setonsendfilecancelrecv(onsendfilecancelrecv);m_ptcpclient-setonsendfilerecvfail(onsendfilerecvfail);m_ptcpclient-setonsendfileprogress(onsendfileprogress);return true; / return true unless you set the focus to a controlvoid csenddlg:onsyscommand(uint nid, lparam lparam)if (nid & 0xfff0) = idm_ab

43、outbox)caboutdlg dlgabout;dlgabout.domodal();elsecdialog:onsyscommand(nid, lparam);/ if you add a minimize button to your dialog, you will 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 csenddlg:onp

44、aint() if (isiconic()cpaintdc dc(this); / device context for paintingsendmessage(wm_iconerasebkgnd, (wparam) dc.getsafehdc(), 0);/ center icon in client rectangleint cxicon = getsystemmetrics(sm_cxicon);int cyicon = getsystemmetrics(sm_cyicon);crect rect;getclientrect(&rect);int x = (rect.width() -

45、cxicon + 1) / 2;int y = (rect.height() - cyicon + 1) / 2;/ draw the icondc.drawicon(x, y, m_hicon);elsecdialog: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:onconne

46、ct() if(!updatedata()return;m_ptcpclient-setaddr(char *)(lpctstr)m_strserverip);m_ptcpclient-setport(m_nport);m_ptcpclient-setpackagesize(m_dwpackagesize);m_ctlcnnstatus.setwindowtext(請(qǐng)等待.);if(!m_ptcpclient-connect()m_ctlcnnstatus.setwindowtext(連接失敗!);elsem_ctlcnnstatus.setwindowtext(已連接);void csend

47、dlg: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)afxmessagebox(發(fā)生文件失敗);void csenddlg:onsendmsg(void)char s99999;if(!up

48、datedata()return;sprintf(s, 00000001%s, m_strmsg);m_ptcpclient-sendnetmsg(s, strlen(s) - 6);void csenddlg:onsocketsenderr(void *pnotifyobj, socket hsocket)csenddlg *psenddlg = (csenddlg *)pnotifyobj;psenddlg-m_ctlcnnstatus.setwindowtext(發(fā)送數(shù)據(jù)出錯(cuò));void csenddlg:onsocketrecverr(void *pnotifyobj, socket hsocket)csenddlg *psenddlg = (csenddlg *)pnotifyob

溫馨提示

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

評(píng)論

0/150

提交評(píng)論